手机
当前位置:查字典教程网 >编程开发 >C语言 >详解C++成员函数的override和final说明符的用法
详解C++成员函数的override和final说明符的用法
摘要:override说明符可使用override关键字来指定在基类中重写虚函数的成员函数。语法function-declarationoverr...

override 说明符

可使用 override 关键字来指定在基类中重写虚函数的成员函数。

语法

function-declaration override;

备注

override 仅在成员函数声明之后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。

使用 override 有助于防止您的代码中出现意外的继承行为。以下示例演示在未使用 override 的情况下,可能不打算使用派生类的成员函数行为。编译器不会发出此代码的任何错误。

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 };

当使用 override 时,编译器会生成错误,而不会在不提示的情况下创建新的成员函数。

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() };

若要指定不能重写函数且不能继承类,请使用 final 关键字。

final 说明符

可以使用 final 关键字指定无法在派生类中重写的虚函数。您还可以使用它指定无法继承的类。

语法

function-declaration final; class class-name final base-classes

备注

final 只有在函数声明或类名称后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。

在类声明中使用 final 时,base-classes 是声明的可选部分。

下面的示例使用 final 关键字指定无法重写虚函数。

class BaseClass { virtual void func() final; }; class DerivedClass: public BaseClass { virtual void func(); // compiler error: attempting to // override a final function };

有关如何指定可以重写成员函数的信息,请参阅 override 说明符"。

下一个示例使用 final 关键字指定无法继承类。

class BaseClass final { }; class DerivedClass: public BaseClass // compiler error: BaseClass is // marked as non-inheritable { };

【详解C++成员函数的override和final说明符的用法】相关文章:

linux下access函数的用法介绍

如何使用VC库函数中的快速排序函数

指向类成员函数的指针其实并非指针

解析C++中虚析构函数的作用

c++中string类成员函数c_str()的用法

C/C++指针和取地址的方法

C语言文件操作函数freopen详细解析

深入解析函数指针与返回函数的指针

浅析C语言中assert的用法

C++中const的用法详细总结

精品推荐
分类导航