這是交易。我有一個很大的類層次結構,並且有一個方法可以一直延伸。該方法始終需要在每個新級別查看一個或兩個以上的變量,並且這些變量取決於層次結構中的實際類。我想要做的是檢查這兩個額外的變量,然後調用超類的同一個函數的版本。我希望能夠定義這個函數,因爲它的所有直接的孩子都會使用它,但是我想要強制該類的任何孩子必須重新定義該方法(因爲他們將不得不查看他們的新數據成員)在C++中是否可以定義純虛函數?
那麼我怎麼寫這個?我通常使用= 0;在.h文件中,但我認爲我不能使用它並將其定義...
這是交易。我有一個很大的類層次結構,並且有一個方法可以一直延伸。該方法始終需要在每個新級別查看一個或兩個以上的變量,並且這些變量取決於層次結構中的實際類。我想要做的是檢查這兩個額外的變量,然後調用超類的同一個函數的版本。我希望能夠定義這個函數,因爲它的所有直接的孩子都會使用它,但是我想要強制該類的任何孩子必須重新定義該方法(因爲他們將不得不查看他們的新數據成員)在C++中是否可以定義純虛函數?
那麼我怎麼寫這個?我通常使用= 0;在.h文件中,但我認爲我不能使用它並將其定義...
實際上,您可以將函數聲明爲純虛擬的,並仍然在基類中爲其定義實現。
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();
}
您可以爲純虛函數提供定義。檢查GotW #31瞭解更多信息。
也許我的大腦太小了,但是在派生類中更改pure_virtual的簽名使我感到困惑。它說明了什麼? – 2008-12-08 00:27:40
onebyone好抓oO我沒有發現它。我懷疑這是一個錯字? – 2008-12-08 00:33:27