C++中如何得知子类继承自哪个父类

发布时间:2024-05-14 02:30 发布:上海旅游网

问题描述:

己知子类,父类未知,如何判断该子类继承自哪一个父类,是否有何关键字能实现此方法(C++)
是父类不知道是哪个的情况下,要想得到这个子类的父类名

问题解答:

应该没有关键字
在 MFC 深入浅出中有讲到一种解决办法
比较复杂,如果弄懂了,水平可大幅提高

你可以dynamic_cast转换呀,判断返回值。

或者你可以向MFC那样,自己实现这个功能

typeid也是个选择

可以,请下载一本<Inside C++ Object Model>看一下,
里面有类的具体结构,找到RTTI,然后小小的黑一下就可以了。
但类的类型存储并没有被标准化,所以要注意一下,因为换个编译器可能就不对了。

=============
前提这个子类的父类是从N个已知父类中去选
如(B代表Base, D代表Derive)
class B1;
class B2;
class B3;

class D : public B2;
D d;
有几种方法:

1. B1 *p = dynamic_cast<B1*>(&d);
如果p不为NULL,则B1是d的父类
B2,B2类似比较

2. typeid(B1) == typeid(d); 是父类就为真

PS: 在编译器设置中要打开RTTI才行

没有

MFC中有这样的例子,"类的动态识别技术"。

用RTTI信息是可以识别类的信息的,但是难度相对比较高。究其原因就是C++允许多继承实现。

热点新闻