2
將override成員函數聲明爲final和final是否有用?爲什麼或者爲什麼不?使用具有相同成員函數的override和final關鍵字是否有用?
將override成員函數聲明爲final和final是否有用?爲什麼或者爲什麼不?使用具有相同成員函數的override和final關鍵字是否有用?
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!
};
這並沒有真正表現出一個用例。如果你最終做出這個決定,爲什麼你會首先使這個方法變成虛擬的? – sp2danny
@ sp2danny您是指Stefano還是我的評論?我爲您的(現在刪除的)答案提供了一個評論的例子(基礎)。 – Angew
我指的是以下思路:如果它是以前引入的,是不是'final'和'override'是同一個東西?如果剛推出,爲什麼它開始時是「虛擬」的? – sp2danny