2015-11-18 123 views
0

f1成爲c類的虛擬非抽象方法,f2是類c的方法。
也讓c_derived成爲基類c的派生類。
假設在c_derived中覆蓋f1。我怎樣才能調用方法f1(覆蓋)c_derived - 從方法f2c
可能的解決方法。將函數指針參數添加到c::f2參數列表中,創建c::f2的包裝c_derived::w,並將函數指針c_derived::f1從包裝c_derived::w傳遞到c::f2
有沒有,而是一個合理的方式來做到這一點?C++ - 從方法基類中調用派生類中的重寫方法

+0

這是c#,我知道,但你有沒有嘗試過調用base.f1()? –

+0

重複?其實,這不是你要找的機器人嗎? http://stackoverflow.com/questions/357307/how-to-call-a-parent-class-function-from-derived-class-function –

+0

@GrahamBass從問題,他想從基地調用派生版本方法。所以只需一個簡單的電話就可以做到這一點... –

回答

2

儘管Luchian Grigore給出了很好的答案,但我想指出這個想法是template method pattern背後的一個觀點。

該模式讓派生類決定如何完成算法實現,或者通過使用純虛擬方法提供虛擬方法形式的默認解決方案或完全不提供解決方案。

在上面提到這兩種情況下,所述f2構件調用右實施f1構件的,因爲它遵循:

f1(); 

知道了溶液中的一種的名稱通常施加是有幫助的。

3

這是棘手的,但它可以與一些黑客來完成:

void c::f2() 
{ 
    f1(); // if f1 is overriden in a class deriving from c, 
      // the derived class version is called 
} 

要調用基類的版本(c::f1),你需要完全限定的呼叫 - c::fi()

+0

這種棘手的解決方案的確如此。 :-) – skypjack

+0

對我來說太棘手,對不起;) – Stencil

相關問題