派生類重寫父類的虛函數,是C++中多態的體現。而final關鍵字爲我們提供了一種控制手段,用來阻止子類重寫自身的虛函數。
這種控制手段一般用於派生類,用來阻止更多的下級子派生類來重寫虛函數。如果在基類(最頂級的父類)中使用的話,此虛函數就不會有在任何派生類中被重寫。當然,也就失去了成爲虛函數的意義。
class a
{
virtual void fun() = 0;
};
class b :public a
{
void fun() final;
};
class c:public b
{
void fun(); // 報錯,無法重寫父類的虛函數
};
final通常只在繼承關係的“中途”終止派生類的重載中有意義。從接口派生的角度而言,final可以在派生過程中任意地阻止一個接口的可重寫性,這就給面向對象帶來了更大的控制力。
參考《深入理解C++11: C++11新特性解析與應用》
謝謝閱讀