对不起,标题的措辞;我不知道如何使它变得更好。但是我的问题的要点是这样的:

#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(这意味着这些类需要是多态的)。

10-05 19:52