[C++11 类的改进] --- 继承控制:final和override

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 类的改进] --- 继承控制:final和override相关的知识,希望对你有一定的参考价值。

C++11之前一直没有继承控制关键字,禁用一个类的进一步衍生比较麻烦,C++11添加了两个继承控制关键字,final和override

1 final关键字

final关键字有两个作用:

  1. 阻止类的进一步派生
  2. 阻止虚函数的进一步重写
    看一段代码示例:
#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

[C++11 类的改进] --- 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数