ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【C++-笔记】override与final说明符

2022-08-28 16:01:47  阅读:177  来源: 互联网

标签:函数 C++ 说明符 基类 override final


在effective C++中提到C++没有Java那样的final classes的禁止派生的机制,遂想到在C++ Primer中好像提到过final说明符,正好就连带着override说明符一起复习一下了。

简介

首先介绍一下在继承当中,如果派生类定义了一个与基类中虚函数同名但是形参列表不同的函数,编译器会认为这是合法的行为,这两个函数是独立的两个函数,这时派生类的函数并没有覆盖掉基类中的版本。但是可能存在这样一种问题:我们本来希望是对于基类函数的重载,但是不小心弄错了形参列表。这个时候就体现了override说明符的作用了。

override说明符

如果使用了override说明符,则表明我们希望这个函数可以覆盖基类中的同名虚函数,因此如果出现了形参列表不同的问题,编译器就会报错。
另外需要注意的是,只有虚函数才可以被覆盖,如果在子类中对基类中的非虚函数使用override同样也会报错。

final说明符

与override说明符相对,如果我们将类中的某个成员函数指定为final,则之后任何试图覆盖该函数的行为都将引发错误。对于final说明符的使用则不限定于虚函数,也就是说如果在基类中使用了final说明符,是不允许派生类中声明同一个函数的

总结

确实可以看到C++中虽然有final说明符,但是并不是用于防止派生类的产生,而是用于单个成员函数的覆盖问题。
另外,如果我们不希望非虚析构函数被继承,可以将其声明为final。但是这个和使用继承的初衷相悖,我们在设计一个类的时候就应当考虑到这个类是否会被继承,因此在设计之初就应该考虑这个析构函数是否应当设计成虚函数。

标签:函数,C++,说明符,基类,override,final
来源: https://www.cnblogs.com/wuyawine/p/16632924.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有