所以我知道,從各種在線資源,這通常是一個沒有沒有從構造函數中調用虛函數。我意識到這裏的問題是基類將首先構造,而C++將首先調用基類的函數版本。不過,我有一個獨特的用例,可能與此無關。我會欣賞一些評論。考慮這種情況。虛函數調用
class Base
{
public:
Base(string data)
{
Parse(data);
}
~Base(){}
private:
virtual Parse(string data);
}
class Derived : public Base
{
public:
Derived(string data)
{
Parse(data);
}
~Derived();
private:
Parse(string data);
}
比方說,我有這樣的設置和我的預期每一個派生類的行爲是:
- 解析被調用基類來解析出什麼應該是共同所有這些輸入字符串。
- 派生的分析應該獲取特定於派生類的數據。
是否有意義在這種情況下使用虛擬函數的構造?或者我每次構建這個課程時都不得不「公開解析」並稱之爲「解析」?或者還有其他建議。
我希望這是有道理的,並請原諒以上的任何語法錯誤,我只是想表達一個總體思路。
沒關係。行爲完全由標準定義,依賴於這不是一個「不」。只有當人們天真地期望有不同的事情發生時,這是一個不容否認的事情。不過,如果你的同事稍後再來,並且被你的代碼弄糊塗,那麼這也可能是一個不好的做法。我更關心的是'Parse'是否實際上是由'Base'中的其他函數調用的。如果是這樣,那爲什麼派生的'Parse'只解析特定於派生類的數據並不重要?如果沒有,那麼將它作爲私有虛擬功能有什麼意義呢? –
如果它按照您的描述工作,爲什麼Parse虛擬? –
您仍然可以在派生類中創建'Parse()'虛擬,但是可以從構造函數Derived :: Parse(data)'中顯式地調用它。 –