c++11新特性篇-final和override关键字

final关键字

c++11添加了final关键字用于修饰类、虚函数和虚继承。

当一个类被声明为final时,它表示该类不能被其他类继承。

当一个虚函数被声明为final时,表示该虚函数不能在派生类中被重写。

主要是为了避免在继承层次中进一步的修改,增加了代码的安全性和稳定性。

final写在被修饰函数和类的后面。

final修饰函数的话,只能修饰虚函数,而且一般是禁止孙子类重写子类的,代码如下:

class Base
{
public:
    virtual void test()
    {
        cout << "Base class" << endl;
    }
    
};

class Son final : public Base
{
public:
    void test() final
    {
        cout << "Son class" << endl;
    }
};

class GrandSon//:  报错public Son
{
public:
    //报错
    /*void test()
    {
        cout << "GrandSon class" << endl;
    }*/
};

上述代码中的Base类声明了虚函数test,子类中重写了该函数并声明为final,因此在孙子类中如果再次重写该函数将会报错。

其次是final修饰类,当一个类被final修饰后,不允许有其他子类继承这个被final修饰过的类,代码如下:

class Base final {
    // ...
};

class Derived : public Base {  // 错误,Base类被声明为final,不能被继承
    // ...
};

Override

override关键字主要是用来确保正确书写子类中重写的虚函数。

如果派生类中的函数使用了override关键字,但没有正确地覆盖基类中的虚函数,编译器将生成错误。

简单意思就是你可能把字母写错了,加上override后编译器会自动提示你。。。

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

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

class GrandChild : public Child
{
public:
    void test() override
    {
        cout << "Child class...";
    }
};

这个主要针对函数名和返回值如果出现问题都会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值