0
如果我有A类和B类,其子类的,应该typeid(x)
,给予或B型的类型,如果x由下式给出:在C++中由基类指针引用的对象的打印类型?
A *x = new B();
在我的测试中我得到的类型A - 这不是很有用 - 但我不确定这是由于C++的工作原理,还是由于编译器设置?
如果我有A类和B类,其子类的,应该typeid(x)
,给予或B型的类型,如果x由下式给出:在C++中由基类指针引用的对象的打印类型?
A *x = new B();
在我的测试中我得到的类型A - 这不是很有用 - 但我不确定这是由于C++的工作原理,还是由于编译器设置?
示例代码:
#include <iostream>
#include <typeinfo>
// Remember to add a virtual member function in A
// to enable RTTI.
struct A { virtual ~A() {} };
struct B : A { virtual ~B() {}};
int main()
{
A* ap = new B();
std::cout << typeid(ap).name() << std::endl;
std::cout << typeid(*ap).name() << std::endl;
}
输出,以克++ 4.8.2:
P1A 1B
使用'typeid的(* X)'。 –
哦,那很简单!我认为我的示例代码是一个错字,但实际上这是问题所在。如果你把这个作为答案,我会接受它。 –
只有在基类中至少有一个'virtual'函数时才能工作。 –