C++中如何判断一个指针指向什么类型的对象?

2024-02-02

假设我有class SuperClass { public: int a; } and class SubClass : SuperClass { public: int b; }我获取了一个指向子类实例的指针SubClass *subPointer并将该指针寻址到超类指针SuperClass *superPointer = subPointer。现在我当然可以随时施放superPointer对象指向子类的指针,因为它存储的唯一内容是地址。但我怎么知道这个物体是否superPointer是指向子类的实例还是只是一个超类指针?


你通常don't想要使用typeid为了这。

你通常想要使用dynamic_cast反而:

if (SubClass *p = dynamic_cast<SubClass *>(SuperClassPtr))
    // If we get here (the `if` succeeds) it was pointing to an object of 
    // the derived class and `p` is now pointing at that derived object.

不过有一些注意事项。首先,基类中至少需要一个虚函数才能工作(但如果它没有虚函数,为什么要继承它?)

其次,经常需要这样做往往表明代码存在设计问题。在大多数情况下,您希望在基类中定义一个虚函数,并在派生类中重写该虚函数(如果需要)以执行所需的操作,这样您就可以在整个过程中只使用指向基类的指针。

最后,就目前而言,大多数转换都会失败——您使用了默认(私有)继承,这阻止了隐式转换derived * to base *你通常期望看到发生的事情(你可能想要class SubClass : public SuperClass).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中如何判断一个指针指向什么类型的对象? 的相关文章

随机推荐