override关键字和final关键字
2023-03-14 22:50:44 时间
override关键字
- 派生类如果定义了一个函数与基类中虚函数的名字相同但是形参列表不同,编译器将认为新定义的这个函数与基类中原有的函数是相互独立的。这时,派生类的函数没有覆盖掉基类中的版本。
- 如果我们使用override关键字标记某个函数,但该函数并没有覆盖已存在的虚函数,此时编译器将报错。
class B
{
virtual void f1(int) const {};
virtual void f2() {};
void f3() {};
};
class D :B //默认私有继承
{
void f1(int) const override {};//正确:f1与基类中的f1匹配
void f2(int) override {};//错误:B没有形如f2(int)的函数
void f3()override;//错误:f3不是虚函数
void f4()override;//错误:B没有名为f4的函数
};
- override关键字只能用于虚函数中,因为只有虚函数才能被覆盖
final关键字
- 我们可以把某个函数指定为final,如果我们已经把函数定义成final了,则之后任何尝试覆盖该函数的操作都会引发错误:
class B
{
public:
virtual void f1(int) const {};
virtual void f2() {};
void f3() {};
};
class D1:B //默认私有继承
{
public:
//从B继承f2()和f3(),覆盖f1(int)
void f1(int) const final {};//不让后续其他类覆盖f1(int)
};
class D2 :D1
{
public:
void f2() {};//正确:覆盖从间接基类B继承而来的f2
void f1(int) const {};//错误:D1已经将f2声明成final
};
class D3 :B
{
public:
void f1(int) {};//正确:因为只有继承至B的子类才不能覆盖f1函数
};
相关文章
- 七夕,诺奖得主用算法教你如何脱单
- 一篇学会抽象工厂模式
- Redisson 分布式锁源码 10:读写锁
- 回归分析的七种武器
- 面试官:React中的Key有什么作用?
- 代码写的烂,经常被同事怼,教你一招!
- Vue 2 系统如何快速迁移 Vite 作为开发工具
- 第一次面试,我差点被面试官打,就因为Collections.sort
- 知道创宇发布Sebug漏洞社区百万奖励计划
- 前端如何开始写第一个 Node Server: 从请求到响应深入浅出
- Test Blog
- 鸿蒙HarmonyOS相机的基本使用实战
- R语言的igraph画社交关系图示例
- 重磅长文|个性化推荐十大挑战
- Go项目实战:一步步构建一个并发文件下载器
- 五个工业风满满的 Look-alike 算法
- 教你在不使用框架的情况下也能写出现代化PHP代码
- 利用DB实现分布式锁的思路
- 国务院印发《促进大数据发展行动纲要》(全文)
- @Autowired报错的四种解决方案和原因分析!