部分覆蓋由基類定義的一組虛函數是否存在問題?C++中部分類函數覆蓋的問題
我的編譯器提供了以下警告:
overloaded virtual function "MyBaseClass::setValue" is only partially overridden in class "MyDerivedClass".
的類是這樣的:
class MyBaseClass
{
public:
virtual void setValue(int);
virtual void setValue(SpecialType*);
}
class MyDerivedClass : public MyBaseClass
{
public:
virtual void setValue(int);
}
最簡單的方法來擺脫這種警告是爲基函數使用不同的名稱,但我想知道是否有任何令人信服的理由來解決這個具體的警告。我不相信這違反了C++標準。我的猜測是,它警告程序員他們可能忘記爲所有可能的輸入類型實現行爲。在我們的案例中,有意排除某些特定類型。
你會不打算壓制這個警告嗎?
如果您使用不同的名稱爲基礎的功能考慮,通過各種手段做到這一點。這表明MyBaseClass :: setValue(int)從MyDerivedClass :: setValue(int)做了一個不同的概念事情,這很糟糕。虛擬功能應該在基礎和派生中執行相同的事情,或者您可以通過較小的更改獲得難以發現的錯誤。 – 2010-01-13 15:46:53
在我的具體情況下,他們在概念上做同樣的事情。重命名可能是像setValueFromInt()setValueFromSpecialType()這看起來不乾淨。我更願意使用其中一個答案中描述的using語句。目前正在調查實施該方法。 – 2010-01-13 16:34:33