2014-06-27 30 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 
相關問題