詳解C++成員函數(shù)的override和final說明符的用法
override 說明符
可使用 override 關(guān)鍵字來指定在基類中重寫虛函數(shù)的成員函數(shù)。
語法
function-declaration override;
備注
override 僅在成員函數(shù)聲明之后使用時才是區(qū)分上下文的且具有特殊含義;否則,它不是保留的關(guān)鍵字。
使用 override 有助于防止您的代碼中出現(xiàn)意外的繼承行為。以下示例演示在未使用 override 的情況下,可能不打算使用派生類的成員函數(shù)行為。編譯器不會發(fā)出此代碼的任何錯誤。
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA(); // ok, works as intended
virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
// override BaseClass::funcB() const and it is a new member function
virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different
// parameter type than BaseClass::funcC(int), so
// DerivedClass::funcC(double) is a new member function
};
當(dāng)使用 override 時,編譯器會生成錯誤,而不會在不提示的情況下創(chuàng)建新的成員函數(shù)。
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA() override; // ok
virtual void funcB() override; // compiler error: DerivedClass::funcB() does not
// override BaseClass::funcB() const
virtual void funcC( double = 0.0 ) override; // compiler error:
// DerivedClass::funcC(double) does not
// override BaseClass::funcC(int)
void funcD() override; // compiler error: DerivedClass::funcD() does not
// override the non-virtual BaseClass::funcD()
};
若要指定不能重寫函數(shù)且不能繼承類,請使用 final 關(guān)鍵字。
final 說明符
可以使用 final 關(guān)鍵字指定無法在派生類中重寫的虛函數(shù)。您還可以使用它指定無法繼承的類。
語法
function-declaration final; class class-name final base-classes
備注
final 只有在函數(shù)聲明或類名稱后使用時才是區(qū)分上下文的且具有特殊含義;否則,它不是保留的關(guān)鍵字。
在類聲明中使用 final 時,base-classes 是聲明的可選部分。
下面的示例使用 final 關(guān)鍵字指定無法重寫虛函數(shù)。
class BaseClass
{
virtual void func() final;
};
class DerivedClass: public BaseClass
{
virtual void func(); // compiler error: attempting to
// override a final function
};
有關(guān)如何指定可以重寫成員函數(shù)的信息,請參閱 override 說明符"。
下一個示例使用 final 關(guān)鍵字指定無法繼承類。
class BaseClass final
{
};
class DerivedClass: public BaseClass // compiler error: BaseClass is
// marked as non-inheritable
{
};
相關(guān)文章
C++封裝遠(yuǎn)程注入類CreateRemoteThreadEx實例
這篇文章主要介紹了C++封裝遠(yuǎn)程注入類CreateRemoteThreadEx實例,詳細(xì)講述了注入DLL到指定的地址空間以及從指定的地址空間卸載DLL的方法,需要的朋友可以參考下2014-10-10
C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng)項目
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng)項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解
Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下2021-11-11

