<分区>
我有 2 个类,B 和 C,子类化了一个抽象类 A 和一个带有指向 A 参数的指针的函数 f。 有没有一种简单的方法让 f() 检测获得的指针是指向 B 还是指向 C?
class A {
//...
};
class B : public A {
//...
};
class C : public A {
//...
};
int f(A* arg);
<分区>
我有 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/