class Base
{
virtual void foo();
}
class Derived : public Base
{
void foo();
}
它可以嗎? 或者它可以使一些問題? 我認爲它堅持「不要從派生」。覆蓋虛擬功能到非虛擬功能可以嗎?
class Base
{
virtual void foo();
}
class Derived : public Base
{
void foo();
}
它可以嗎? 或者它可以使一些問題? 我認爲它堅持「不要從派生」。覆蓋虛擬功能到非虛擬功能可以嗎?
一旦你標記基類中的foo()
功能virtual
它是隱含在派生類virtual
,即使你不提關鍵字virtual
在它前面。
virtual
ness是遺傳的。即使你不聲明重寫方法virtual
,它也會是虛擬的。
因此,如果您使用Base
指針或引用訪問Derived
的對象,它將調用Derived
的foo
。
虛擬功能自動繼承。所以即使你不聲明它是虛擬的,它實際上也是虛擬的。
你明確聲明它作爲虛擬是爲了更好的澄清的原因,使任何人讀取這些代碼可以立即明白,這是一個虛函數,而無需檢查基類的聲明。
其標記虛擬保證,它是虛擬的,即使基類具有相同簽名的成員函數是** **不虛。沒有捷徑可以讓你在不瞭解你在做什麼的情況下編寫正確的代碼。 (好吧,新的「override」關鍵字可能會讓懶惰的程序員更輕鬆......) –
請用你正在談論的語言(C++ I guess)來標記你的問題。 – Mat
是的,請在C#中標記它會給你以下警告。 「隱藏繼承的成員Base.foo()。要使當前成員重寫該實現,請添加override關鍵字,否則添加新關鍵字。」你可以閱讀它[這裏](http://msdn.microsoft.com/en-us/library/aa691135(v = vs.71).aspx) –
這甚至不可能。該功能仍然是虛擬的,即使你不這樣說。 – EJP