博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 11 override final
阅读量:3593 次
发布时间:2019-05-20

本文共 1558 字,大约阅读时间需要 5 分钟。

类被final修饰,不能被继承

[cpp]
  1. class A1 final { };  
  2. class B1 : A1 { }; // “B1”: 无法从“A1”继承,因为它已被声明为“final”  
class A1 final { };class B1 : A1 { }; // “B1”: 无法从“A1”继承,因为它已被声明为“final”

虚函数被final修饰,不能被override

[cpp]
  1. class A1  
  2. {  
  3.     virtual void func() final {}   
  4. };  
  5.   
  6. class B1 : A1  
  7. {  
  8.     virtual void func() {} //“A1::func”: 声明为“final”的函数无法被“B1::func”重写  
  9. };  
class A1{	virtual void func() final {} };class B1 : A1{	virtual void func() {} //“A1::func”: 声明为“final”的函数无法被“B1::func”重写};

被override修饰后如果父类无对应的虚函数则报错,无法override,这个有什么作用呢,假如你想虚继承基类的函数,但是继承的时候写错了,参数类型不对或个数不对,但是编译没问题,运行时候缺和你设计的不一样不被调用,override就是辅助你检查是否继承了想要虚继承的函数

[cpp]
  1. struct A1  
  2. {  
  3.     virtual void func(int) {}  
  4. };  
  5.   
  6. struct B1 : A1  
  7. {  
  8.     virtual void func(int) override {} // OK  
  9.     virtual void func(double) override {} // “B1::func”: 包含重写说明符“override”的方法没有重写任何基类方法  
  10. };  
//final,override出现在形参列表以及尾置返回类型之后#include 
using namespace std;struct B{ virtual void f1(int) const; virtual void f2(int); void f3(int) final;//出错,final不能修饰非虚函数};struct D:B{ void f1(int) const override ;//去掉const将出错,必须和基类中的函数原型一致,否则不能用override来表示覆盖 void f2(int) final;//final说明继承D的派生类中不能覆盖该函数 void f3();};struct E:B{ void f2(int);//ok,其直接基类B中该函数没有final说明符};struct F:D{ void f2(int);//出错,无法覆盖该函数,原因是其直接基类D中有final说明符};
总结及个人理解:
final 和override只能修饰虚函数,不能修饰非普通函数 ,final还可以修饰类,表示不能被继承;
final 可以用于基类和派生类,override用于派生类,override 和final可以同时出现在派生类中
final修饰的虚函数不能被重写,override当父类没有对应的虚函数时出错
struct A1{	virtual void func(int) {}};struct B1 : A1{	virtual void func(int) override {} // OK	virtual void func(double) override {} // “B1::func”: 包含重写说明符“override”的方法没有重写任何基类方法};

转载地址:http://osown.baihongyu.com/

你可能感兴趣的文章
剑指offer:面试题26. 树的子结构
查看>>
剑指offer:面试题27. 二叉树的镜像
查看>>
剑指offer:面试题33. 二叉搜索树的后序遍历序列
查看>>
输出NN乘法表
查看>>
[2005年NOIP普及组] 陶陶摘苹果
查看>>
[2006年NOIP普及组] 数列
查看>>
[2006年NOIP普及组] 数列
查看>>
[2011年NOIP普及组] 数字反转
查看>>
[2008年NOIP普及组] ISBN号码
查看>>
[2010年NOIP普及组] 数字统计
查看>>
计算多项式的值
查看>>
甲流疫情死亡率
查看>>
计算并联电阻的阻值
查看>>
计算三角形面积
查看>>
计算线段长度
查看>>
大象喝水
查看>>
Java 查找特定的值
查看>>
Java 向量点积计算
查看>>
C语言 数组逆序重放
查看>>
统计字符数
查看>>