2014-06-27 97 views
0

如果我有A类和B类,其子类的,应该typeid(x),给予或B型的类型,如果x由下式给出:在C++中由基类指针引用的对象的打印类型?

A *x = new B();

在我的测试中我得到的类型A - 这不是很有用 - 但我不确定这是由于C++的工作原理,还是由于编译器设置?

+0

使用'typeid的(* X)'。 –

+0

哦,那很简单!我认为我的示例代码是一个错字,但实际上这是问题所在。如果你把这个作为答案,我会接受它。 –

+0

只有在基类中至少有一个'virtual'函数时才能工作。 –

回答

1

示例代码:

#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 
相关问题