C ++多态性:如何测试一个类是否衍生自另一个基类?

利德海

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查一个对象的类是否派生自C ++中另一个对象的类

如何创建一个类,该类是C ++中另一个类的向量?

如何将一个类访问另一个C#类

c#如何从另一个类调用一个类

特定基类的抽象类的C ++ Vector,作为另一个类成员

如何在 C++ 中将另一个类引用到另一个类中?

从另一个类访问 C# 类

C ++从另一个类访问类成员

c#,nUnit如何验证是否调用了另一个类的方法

c ++如何从另一个项目使用一个类

如何从 C# 中的另一个方法引用一个类?

Objective-C-指向一个类的指针与指向另一个类的指针是否不同?

C# 只允许一个类为一个属性调用另一个类的 setter(或者让类知道它是否存储在另一个类的数组中)

目标C-如何从另一个类(另一个UIViewController)更改图像

在另一个类中保存一个类的实例objective-c

C ++在另一个类头文件中声明一个类

C ++-从另一个类构造函数调用一个类构造函数

将一个类用作另一个类的参数。(C ++)

在另一个类 C++ 中包含一个类对象

无法从Visual Studio C ++中的另一个类访问一个类

使用另一个类C ++构造一个类

Objective-C:在另一个类中调用一个类的属性

C#与另一个类中的一个类的变量进行交互

C# - 在另一个类中使用参数调用一个类

如何在另一个类 C# Windows Forms 中引用一个类

如何在C ++中将指向一个类的指针复制到另一个类中?

从另一个生成C ++类

从另一个类C ++获取对象的属性

C ++使用另一个类的函数