C++11 新特性 ---- final 和 override

   一、final

    C++中增加了final关键字,作用如下:

① 限制某个类不能被继承

② 或者某个虚函数不能被重写

① 限制某个类不能被继承

// ① 限制某个类不能被继承,也就是说这个类不能有派生类
class Base{
public:
    virtual void print() {
        cout<<"Base class...";
    }
};

class Child final: public Base{
public:
    void test() {
        cout<<"Child class...";
    }
};

// error,语法错误
class GrandChild : public Child {
public:

};

/*
    总结:
        final修饰的Child类,派生类GrandChild类的继承是非法的,不允许的
*/

C++11 新特性 ---- final 和 override_第1张图片

总结: final修饰的Child类,派生类GrandChild类的继承是非法的,不允许的

② 或者某个虚函数不能被重写

若使用 final 修饰函数,只能修饰虚函数,并且要把 final 关键字放到类或者函数的后面

#include 
using namespace std;

/*
    1.final
    C++中增加了final关键字,作用如下:
        ① 限制某个类不能被继承
        ② 或者某个虚函数不能被重写
    若使用 final 修饰函数,只能修饰虚函数,并且要把 final 关键字放到类或者函数的后面
*/
// 基类: base
class Base{
public:
    virtual void print() {
        cout<< "Base class..." <

总结:print()是基类中的一个虚函数,在子类中重写了这个方法,且使用了 final 关键字
      表示不希望孙子类继续重写这个方法了。因此孙子类对这个方法只能使用不能重写。

二、override

override
    ① override关键字和final一样,需要写到方法的后面
    ② 确保在派生类中声明的重写函数与基类的虚函数有相同的签名
    ③ 表明将会重写基类的虚函数,可保证重写的虚函数的正确性
    ④ 提高代码可读性
#include
using namespace std;
/*
    override
    ① override关键字和final一样,需要写到方法的后面
    ② 确保在派生类中声明的重写函数与基类的虚函数有相同的签名
    ③ 表明将会重写基类的虚函数,可保证重写的虚函数的正确性
    ④ 提高代码可读性
*/
// 基类: Base
class Base{
public:
    virtual void print() {
        cout<<"Base class...\n";
    }
};

// 子类: Child
class Child : public Base{
public:
    void print() override {
        cout<<"Child class...\n";
    }
};

// 孙子类: GrandChild
class GrandChild : public Child{
public:
    void print() override {
        cout<<"GrandChild class...\n";
    }
};

int main() {
    Base bs;
    Child cd;
    GrandChild gc;
    bs.print();
    cd.print();
    gc.print();
    return 0;
}

若派生类指定了要重写父类的print()方法,使用了 override关键字之后,若写错函数名或者函数参数或者返回值,那么编译器都会提示语法错误,因此有利于提高程序的正确性,降低出错的概率。

C++11 新特性 ---- final 和 override_第2张图片C++11 新特性 ---- final 和 override_第3张图片

学习和参考一下文章:

final和override | 爱编程的大丙 (subingwen.cn)icon-default.png?t=N6B9https://subingwen.cn/cpp/final/

你可能感兴趣的:(c++11,final,override,关键字)