[C++11 类的改进] --- 继承控制:final和override
Posted Overboom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 类的改进] --- 继承控制:final和override相关的知识,希望对你有一定的参考价值。
C++11之前一直没有继承控制关键字,禁用一个类的进一步衍生比较麻烦,C++11添加了两个继承控制关键字,final和override
1 final关键字
final关键字有两个作用:
- 阻止类的进一步派生
- 阻止虚函数的进一步重写
看一段代码示例:
#include <iostream>
using namespace std;
//final阻止类的进一步派生,虚函数的进一步重写
#if 0
class A1 final //加上final,指定A1不能派生
int a;
;
class A2: public A1 //err, 基类不能再派生了
;
#endif
//基类
class B1
public:
virtual void func() final //这是最终版本的虚函数,不能再重写
;
//派生类重写基类的虚函数
class B2: public B1
public:
//virtual void func() //err, 基类中的虚函数是最终版本,不能再重写
;
int main()
return 0;
2 override关键字
override关键字确保在派生类中声明的函数跟基类的虚函数有相同的签名。
#include <iostream>
using namespace std;
class A1
public:
//这是第一个虚函数,没有重写,不能用override修饰
virtual int func(int a)
;
class A2:public A1
public:
//在重写虚函数地方,加上override, 要求重写的虚函数和基类一模一样
virtual int func(int b) override
;
int main()
return 0;
如果不加override,在子类中写virtual int func(int b) override这个函数的时候,可以会将参数写错或写漏,这样就不是重写,就是子类覆盖父类的函数。加上override保证子类与父类有相同的签名。
以上是关于[C++11 类的改进] --- 继承控制:final和override的主要内容,如果未能解决你的问题,请参考以下文章
[C++11 类的改进] --- 继承控制:final和override
[C++11 类的改进] --- 继承控制:=default和=delete
[C++11 类的改进] --- 继承控制:=default和=delete
[C++11 类的改进] --- 继承控制:=default和=delete