c++ - C++中如何判断指针指向的对象类型?

标签 c++ pointers polymorphism instance

假设我有 class SuperClass { public: int a; }class SubClass : SuperClass { public: int b; } 并且我获取了一个指向子类 SubClass *subPointer 实例的指针,并将该指针指向一个父类(super class)指针 SuperClass *superPointer = subPointer。当然,现在我总是可以将 superPointer 对象转换为 SubClass 的指针,因为它唯一存储的是地址。但是我怎么知道对象 superPointer 是指向 SubClass 的实例还是只是一个 SuperClass 指针?

最佳答案

您通常不想为此使用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.

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

其次,想要这样往往表明代码存在设计问题。在大多数情况下,您希望在基类中定义一个虚函数,您(如有必要)在派生类中覆盖它以执行任何需要的操作,这样您就可以在整个过程中只使用指向基类的指针。

最后,就目前而言,大多数转换都会失败——您使用了默认(私有(private))继承,这会阻止从 derived *base 的隐式转换* 您通常希望看到的情况(您可能希望 class SubClass : public SuperClass)。

关于c++ - C++中如何判断指针指向的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606586/

相关文章:

c++ - 将模板类作为参数传递

c++ - 调试 gdb 设置

c++ - undefined symbol 首先被引用

c - 使用通配符 (*) 作为第一个输入时,程序出现段错误

c - 动态指针值分配

c++ - 按值删除 vector 中的元素

java - 同一类算法中的不同原始数据类型条目

Java设计: Polymorphic List

c++ - C++ 字符串文字的类型

c++ - 是否可以使用 HTTPS 证书进行许可?