【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-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!