差異

2016-02-19 25 views
26

假設我有A類與虛擬函數F()差異

class A 
{ 
    virtual void F() 
    { 
     // Do something 
    }; 
}; 

我有另一個類B它繼承A重新定義F()

class B : A 
{ 
    void F() 
    { 
     // Do something 
    }; 
}; 

和另一個類C其中繼承A覆蓋F()

class C : A 
{ 
    void F() override 
    { 
     // Do something 
    }; 
}; 

是什麼類BCF()之間的區別?

回答

24

B::f()C::f()都被覆蓋,它們正好是,一樣。

override本質上是一個編譯時諮詢術語,會導致編譯錯誤如果該函數覆蓋一個基類。

這可以幫助程序的穩定性:如果A::f()的名稱和參數類型發生更改,則會導致編譯錯誤。

29

兩者都是重寫。

當您使用關鍵字override確保編譯失敗,如果它應該發生在而不是是一個覆蓋。

這是很好的做法。

+3

更不用說像git – Tgsmith61591

+0

@ Tgsmith61591那樣閱讀存儲庫時的可讀性因數:是的。我還想知道是否包含一個如何重載(基本上「重新定義」)而不覆蓋的例子。但我決定要簡潔。 :) –