簡體   English   中英

如何找出指針在C ++中指向的對象類型?

[英]How to find out what type of object a pointer points to in C++?

假設我有class SuperClass { public: int a; } class SuperClass { public: int a; }class SubClass : SuperClass { public: int b; } class SubClass : SuperClass { public: int b; } ,我把一個指向子類的實例SubClass *subPointer並解決該指針超類指針SuperClass *superPointer = subPointer 當然,我總是可以將superPointer對象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.

雖然有幾個筆記。 首先,你需要在基類中至少有一個虛函數才能工作(但是如果它沒有虛函數,你為什么要從它繼承呢?)

其次,想要這一點往往往往表明代碼的設計問題。 在大多數情況下,您希望在基類中定義一個虛函數,您可以(如果需要)在派生類中重寫以執行任何操作,因此您可以在整個過程中使用指向基類的指針。

最后,就目前而言,大多數轉換都會失敗 - 您使用了默認(私有)繼承,這可以防止從您通常期望看到的derived *base *的隱式轉換(您可能想要class SubClass : public SuperClass )。

使用RTTI機制。 喜歡:

if(typeid(*superPointer) == typeid(SuperClass)) superPointer->dosomething();
if(typeid(*superPointer) == typeid(SubClass)) superPointer->dosomethingelse();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM