如果你想發揮一個classF
指針,你應該傳遞一個classF
指針。您的代碼甚至不應該這樣進行編譯,因爲功能的需要classF
,你給它一個classA
你能得到這個與類轉換爲classF
但,你不應該這樣做編譯。這會讓你進入未定義的行爲狀態,因爲你基本上會對你的編譯器說謊,並說「這個其他類是classF
指針」,這不會是真的。
你總是可以放心地做它轉換爲基類的指針(像你在你的榜樣與鑄造classA
做)
你也應該切換從C風格的強制轉換成C++風格的轉換(如static_cast
或dynamic_cast
)。這也可以幫助你在你的情況。通過動態演員,你可以安全地將一個班級轉化爲一個訓練有素的班級。
像這樣:
class A {};
class B : public A {};
class C : public A {};
A* b-obj = new B;
A* c-obj = new C;
現在都c-obj
和b-obj
是指向A
,所以我們不知道了,如果他們是B或C.你可以用dynamic_cast
C* ptr = dynamic_cast<C*>(b-obj); //returns null because b-obj cannot be converted to C*
C* ptr = dynamic_cast<C*>(c-obj); //does not return null
檢查此您的代碼可以如下所示:
func = static_cast<A*>(e); // cast to base class.
//later then.
classF* funcF = dynamic_cast<F*>(func);
if(funcF != NULL)
{
function(func);
}
c風格的演員陣容可能會有一些你可能不喜歡的副作用。所以強烈建議熟悉C++強制轉換。
請顯示真實密碼。在這種情況下,你應該使用'static_cast'。 –
如果'classF'是必需的,你需要'classF'。如果'classA'提供'function(...)'中需要的所有內容,則相應地更改參數類型。 – grek40
這取決於什麼功能。它可以調用classF的特定方法。 – Daniele