如何找出指针在C++中指向的对象类型?

Mon*_*ams 3 c++ polymorphism pointers instance

假设我已经class SuperClass { public: int a; }class SubClass : SuperClass { public: int b; }我一起指向SubClass的一个实例,SubClass *subPointer并将该指针指向SuperClass指针SuperClass *superPointer = subPointer.当然,我总是可以将superPointer对象强制转换为SubClass的指针,因为它存储的唯一内容是地址.但是我如何知道对象superPointer是指向SubClass的实例还是只是一个SuperClass指针?

Jer*_*fin 11

你通常希望使用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.
Run Code Online (Sandbox Code Playgroud)

虽然有几个笔记.首先,你需要在基类中至少有一个虚函数才能工作(但是如果它没有虚函数,为什么要继承它?)

其次,想要这一点往往往往表明代码的设计问题.在大多数情况下,您希望在基类中定义一个虚函数,您可以(如果需要)在派生类中重写以执行任何操作,因此您可以在整个过程中使用指向基类的指针.

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