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'函數時才能工作。 –