详解C++成员函数的override和final说明符的用法

2025-05-29 0 65

override 说明符

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

?

1
function-declaration override;

备注
override 仅在成员函数声明之后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。
使用 override 有助于防止您的代码中出现意外的继承行为。以下示例演示在未使用 override 的情况下,可能不打算使用派生类的成员函数行为。编译器不会发出此代码的任何错误。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
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 时,编译器会生成错误,而不会在不提示的情况下创建新的成员函数。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
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 关键字指定无法在派生类中重写的虚函数。您还可以使用它指定无法继承的类。
语法

?

1

2

3
function-declaration final;

class class-name final base-classes

备注
final 只有在函数声明或类名称后使用时才是区分上下文的且具有特殊含义;否则,它不是保留的关键字。
在类声明中使用 final 时,base-classes 是声明的可选部分。
下面的示例使用 final 关键字指定无法重写虚函数。

?

1

2

3

4

5

6

7

8

9

10
class BaseClass

{

virtual void func() final;

};

class DerivedClass: public BaseClass

{

virtual void func(); // compiler error: attempting to

// override a final function

};

有关如何指定可以重写成员函数的信息,请参阅 override 说明符"。
下一个示例使用 final 关键字指定无法继承类。

?

1

2

3

4

5

6

7

8
class BaseClass final

{

};

class DerivedClass: public BaseClass // compiler error: BaseClass is

// marked as non-inheritable

{

};

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解C++成员函数的override和final说明符的用法 https://www.kuaiidc.com/106009.html

相关文章

发表评论
暂无评论