c++ - 如何恢复基类指针指向的对象的原始类型?

标签 c++ class object pointers

<分区>

我有 2 个类,B 和 C,子类化了一个抽象类 A 和一个带有指向 A 参数的指针的函数 f。 有没有一种简单的方法让 f() 检测获得的指针是指向 B 还是指向 C?

class A {
//...
};

class B : public A {
//...
};

class C : public A {
//...
};

int f(A* arg);

最佳答案

你不应该关心:这几乎就是多态性的全部要点。

但是,如果您真的需要知道,您有两个(合理的)选择:

1) 使用dynamic_cast。对于指针转换,如果指针不是预期类型,则结果将为 nullptr。对于引用转换,如果引用不是预期的类型,将抛出异常。

2) 构建子类实现的虚函数,例如提供一个表示类型的 enum

(1) 是首选。但请务必首先考虑您为什么需要它。

关于c++ - 如何恢复基类指针指向的对象的原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900034/

相关文章:

c++ - 为已知的更常见路径优化分支

c++ - 如何检测我的 std::function 仍然可用?

c++ - 缺少 vector 模板参数

c++ - 根据当前日期在 C++/Boost 中表示 ISO 8601 持续时间

javascript - JavaScript 中对象/数组的性能如何? (专门针对 Google V8)

C++运算符重载无法输出+运算

c++ - Qt访问类中的mainWindow而不给它对象

java - 如何在不创建子类和/或继承类的情况下从另一个类调用对象的方法?

javascript - typeof 新字符串 ("aaa") === "object"?万物皆对象,却有原始类型?

php - 在类中使用超过 1 个内联函数