1

如果函數指針在基類中定義並賦值。它必須用來從派生它的類中調用一個函數。我們怎麼做到這一點?C++:通過基類中定義的函數指針派生函數調用

This顯示了一個通過指針調用函數的示例。但是,這僅適用於指針在與使用位置相同的類中定義的情況。

This顯示調用父類函數的示例。我嘗試了一些類似的東西,但沒有奏效。

From derived 
(((Base)this)->*fncPtr)(); 
(((Base)this)->*(Base::fncPtr))(); 

以上兩種都不起作用。請幫助我。

+0

對於這種情況,您最好使用_Template函數Pattern_而不是函數指針。 –

+0

你是否建議沒有解決方案。除了使用模板功能模式? – PHcoDer

+0

我認爲這將是更好,更直接的解決方案(可能更少出錯)。 –

回答

3

只需使用:

(this->*fncPtr)(); 

沒有別的要求。強制轉換爲基本類型是隱含的。所以你不需要明確地施放它。

1

給定一個指針的Derived成員函數:

void (Derived::*derivedFncPtr)() = &Derived::someMemberFunction; 

首先,將它轉換爲一個指針的Base成員函數:

void (Base::*baseFncPtr)() = static_cast<void (Base::*)()>(derivedFncPtr); 

然後,調用它:(假設*this是一個Base動態型Derived

(this->*baseFncPtr)(); 

Live example

+0

謝謝。但是這裏指向成員函數的指針也是基類。 – PHcoDer

+0

我不知道你的意思。你能改善這個問題嗎? – Oktalist

+0

完成。請再次參閱示例代碼。我之前在示例代碼中犯了一些錯誤。 – PHcoDer

1

如果你有一個指向基void (Base::*fncPtr)()的成員函數,你可以用一個指針以完全相同的方式調用它來派生類對象this,你會叫一個指向同一個派生類的成員函數。

(this->*fncPtr)(); 

Demo here


(((Base)this)->*fncPtr)(); 

您可以顯式轉換thisBase的指針,如果你真的想(它不是必需的),但這不是它是如何自Base以來完成的操作不是指針類型。這將工作:

((Base*)this)->*fncPtr)(); 

但正如我所說,演員是多餘的。

相關問題