2008-12-07 66 views
6

這是交易。我有一個很大的類層次結構,並且有一個方法可以一直延伸。該方法始終需要在每個新級別查看一個或兩個以上的變量,並且這些變量取決於層次結構中的實際類。我想要做的是檢查這兩個額外的變量,然後調用超類的同一個函數的版本。我希望能夠定義這個函數,因爲它的所有直接的孩子都會使用它,但是我想要強制該類的任何孩子必須重新定義該方法(因爲他們將不得不查看他們的新數據成員)在C++中是否可以定義純虛函數?

那麼我怎麼寫這個?我通常使用= 0;在.h文件中,但我認爲我不能使用它並將其定義...

回答

9

實際上,您可以將函數聲明爲純虛擬的,並仍然在基類中爲其定義實現。

class Abstract { 
public: 
    virtual void pure_virtual(int x) = 0; 
}; 

void Abstract::pure_virtual(int x) { 
    // do something 
} 


class Child : public Abstract { 
    virtual void pure_virtual(int x); 
}; 

void Child::pure_virtual(int x) { 
    // do something with x 
    Abstract::pure_virtual(); 
} 
+0

也許我的大腦太小了,但是在派生類中更改pure_virtual的簽名使我感到困惑。它說明了什麼? – 2008-12-08 00:27:40

+0

onebyone好抓oO我沒有發現它。我懷疑這是一個錯字? – 2008-12-08 00:33:27

9

您可以爲純虛函數提供定義。檢查GotW #31瞭解更多信息。

相關問題