我有一個基類和一個類繼承基地。基類有幾個虛擬函數,繼承類可能會覆蓋。但是,基類中的虛函數具有必須在繼承類覆蓋被調用之前運行的代碼。有什麼方法可以先調用基類虛函數,然後繼承類重寫。不需要調用base.function()。呼叫基地功能,然後繼承函數
我知道我可以簡單地做兩個函數,一個被調用,另一個虛擬。但是有沒有辦法讓我保持同樣的名字?我知道我可能需要改變一些事情。
class myBase
{
public virtual myFunction()
{ /* must-run code, Called first */ }
}
class myInherited : myBase
{
public override myFunction()
{ /* don't use base.myFunction();,
called from base.myFunction(); */ }
}
同類問題here。
有沒有一種方法可以做到這一點,而無需在基類中創建兩個函數?或者至少讓他們有相同的名字? – Dave 2010-09-19 22:23:46
@Dave:不,在虛擬方法調用之前或之後,無法神奇地調用重寫的基本方法。你必須以某種方式分割它。 (如果將它分開,除了在受保護的方法之前和之後執行某些操作外,還可以強制重寫方法調用重寫的基本方法。) – dtb 2010-09-19 22:25:31
這也稱爲非虛擬接口習慣用法 - http:// en。 wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – sll 2011-10-12 15:07:42