2012-10-03 71 views

回答

0

是的,如果你沒有聲明它virtual它是不可能覆蓋它。

Pre C++ 11,如果方法是virtual,有編譯器擴展。例如,MSVS提供sealed關鍵字。

+3

如果您沒有聲明它是虛擬的,則子類將隱藏該方法而不是覆蓋該方法, 。 – kennytm

+0

@KennyTM你假設一個名稱相同的方法存在於派生類中。 –

+0

當然可以。 – kennytm

1

如果你正在處理一個virtual方法,您可以使用C++ 11的final特殊的標識符。

class A 
{ 
    virtual void foo() const final; 
}; 

這將防止重寫或名稱隱藏,具體取決於上下文。

+0

我不能在g ++中定義這樣的成員函數''final'不會命名一個類型'可能是什麼問題?我的編譯器'gcc版本4.6.3 20120306(Red Hat 4.6.3-2)(GCC)' –

+0

@NayanaAdassuriya對於C++支持,您需要使用-std = C++ 0x進行編譯,但似乎這只是從GCC 4.7以後。 – juanchopanza

相關問題