簡體   English   中英

如何將基類指針轉換為派生自該類的指針? C ++

[英]How do I cast a base class pointer to a pointer of a class derived from it? C++

我通過參數將(類A)的2個指針傳遞給它的派生類(類B)。

指針之一必須是B類,以便我可以調用在B中聲明的方法。

我該怎么做?

靜態轉換是否只能讓您以相反的方式進行操作? (B將被動態轉換為A類型)。 有人告訴我不要做C型演員表。 重新解釋演員表可能很危險嗎?

我能想到的唯一一個是靜態演員表。 那是我這里需要的嗎?

謝謝

為此,您可以使用static_castdynamic_cast 兩者之間的區別在於, dynamic_cast將在運行時檢查指針是否實際指向派生類的對象(這要求基類中至少有一個virtual成員函數(包括析構函數)) )。 如果可以確定是否可以進行static_cast類型轉換,那么static_cast只會執行該類型而無需運行時檢查。

語法為:

B* p_b = static_cast< B* >( p_a );

// or:

B* p_b = dynamic_cast< B* >( p_a );

通常,您希望通過僅使用在基類中聲明為virtual的成員函數來避免此類情況。 如果必須將指針強制轉換為派生類,請確保基類至少具有一個virtual函數(任何函數或析構函數都足夠),然后使用dynamic_cast<T>

BaseClass *bp = new DerivedClass();
...
DerivedClass *dp = dynamic_cast<DerivedClass*>(bp);
if (!dp) {
    cerr << "Not a derived class!" << endl;
}

如果bp指向DerivedClass ,則動態轉換成功; DerivedClass 否則,它將失敗,並返回空指針。

您可能需要使用特殊標志進行編譯才能啟用RTTI支持。

暫無
暫無

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

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