对不起,标题的措辞;我不知道如何使它变得更好。但是我的问题的要点是这样的:
#include <iostream>
using namespace std;
class Base {};
class Base2 {};
class C : public Base, public Base2 {};
class D : public Base {};
void isDerivedFromBase2(Base *p) {
if (...) { /* test whether the "real object" pointed by p is derived from Base2? */
cout << "true" << endl;
}
cout << "false" << endl;
}
int main() {
Base *pc = new C;
Base *pd = new D;
isDerivedFromBase2(pc); // prints "true"
isDerivedFromBase2(pd); // prints "false"
// ... other stuff
}
如何测试由其基类指针
Base *
表示的对象是否从另一个基类Base2
派生? 最佳答案
您可以像这样执行dynamic_cast
:
if (dynamic_cast<Base2 *>(p)) {
online_compiler
与使用
typeid
的方法不同,该方法不需要包含额外的头,但是它也依赖于RTTI(这意味着这些类需要是多态的)。