2014-12-22 14 views

回答

6

override確保該函數是虛擬的並且正在重寫超類的定義(否則會產生編譯時錯誤),而final意味着子類不能進一步覆蓋它。所以是的,當你重寫一個超類函數並且你不希望子類再次覆蓋它時,它是非常有意義的。

例如,請考慮以下層次:

class A { 
public: 
    virtual void foo() {} 
}; 

class B: public A { 
public: 
    void foo() override final {} // <-- Overrides A::foo 
}; 

class C: public B { 
public: 
    //void foo() override {} <-- Error here! 
}; 
+0

這並沒有真正表現出一個用例。如果你最終做出這個決定,爲什麼你會首先使這個方法變成虛擬的? – sp2danny

+0

@ sp2danny您是指Stefano還是我的評論?我爲您的(現在刪除的)答案提供了一個評論的例子(基礎)。 – Angew

+0

我指的是以下思路:如果它是以前引入的,是不是'final'和'override'是同一個東西?如果剛推出,爲什麼它開始時是「虛擬」的? – sp2danny

相關問題