[英]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_cast
或dynamic_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.