【发布时间】:2013-07-12 02:28:01
【问题描述】:
假设我有class SuperClass { public: int a; } 和class SubClass : SuperClass { public: int b; },我获取了一个指向子类实例SubClass *subPointer 的指针,并将该指针指向一个超类指针SuperClass *superPointer = subPointer。当然,现在我总是可以将 superPointer 对象转换为 SubClass 的指针,因为它存储的唯一内容是地址。但是我怎么知道对象superPointer是指向一个SubClass的实例还是只是一个SuperClass的指针呢?
【问题讨论】:
-
一般情况下这个是做不到的,不过大部分情况下RTTI会告诉你如果你用它编译的话。
-
除了@Antimony 的建议之外,还有一些方法可以将这些知识构建到对象本身中,但它们通常要求所有内容都继承自某个上帝类(还有另一个
TObject,有人吗?)。大多数人会试图劝阻你不要这样做。 -
正如建议的副本所示,最简单的做法是在
SuperClass中添加一个虚拟析构函数,然后测试dynamic_cast<SubClass *>(superPointer)的结果。 -
在此处查看实际操作:ideone.com/hUiIfE
标签: c++ pointers polymorphism instance