【C++-笔记】override与final说明符
2022/8/29 14:24:32
本文主要是介绍【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说明符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享