【C++11】final 与 override 关键字

final 和 override 两个关键字用于继承和多态
final: 修饰虚函数,表示该虚函数不能再被重写
#include <iostream>

// 基类 Base
class Base{
public:
    // 被 final 修饰的虚函数不能再被重写
    // 重写编译器会报错
    virtual void func() final {
        std::cout<<"void Base::func()"<<std::endl;
    }
};

// 派生类 Derived
class Derived: public Base{
public:
    void func(){
        std::cout<<"void Derived::func()"<<std::endl;
    }
};

int main(){
    Base *p = new Derived();
    
    std::cout << "p -> func() 输出:" << std::endl;
    p -> func();  
    std::cout << std::endl;
    
    return 0;
}
final: 修饰类,表示该类不能再被继承

如何实现一个不能被继承的类??

(1) C++98:把构造函数进行私有

(2) C++11:类定义时 加 final 关键字

#include <iostream>

// 基类 Base
class Base final {
public:
    // 被 final 修饰的虚函数不能再被重写
    // 重写编译器会报错
    virtual void func() {
        std::cout<<"void Base::func()"<<std::endl;
    }
};

// 派生类 Derived
class Derived: public Base{
public:
    void func(){
        std::cout<<"void Derived::func()"<<std::endl;
    }
};

int main(){
    Base *p = new Derived();
    
    std::cout << "p -> func() 输出:" << std::endl;
    p -> func();  
    std::cout << std::endl;
    
    return 0;
}
override: 修饰虚函数, 检查派生类虚函数是否重写了基类某个虚函数,如果没有重写编译报错
#include <iostream>

// 基类 Base
class Base{
public:
    // 基类的虚函数
    virtual void func() {
        std::cout<<"void Base::func()"<<std::endl;
    }
};

// 派生类 Derive
class Derive_01: public Base{
public:
    // 派生类完成了虚函数的重写,编译通过
    void func() override {
        std::cout<<"void Derived::func()"<<std::endl;
    }
};

// 派生类 Derive
class Derive_02: public Base{
public:
    // 派生类没有重写基类虚函数,编译报错
    void func(int n) override {
        std::cout<<"void Derived::func()"<<std::endl;
    }
};

int main(){
    Base *p = new Derived();
    
    std::cout << "p -> func() 输出:" << std::endl;
    p -> func();  
    std::cout << std::endl;
    
    return 0;
}

感谢链接:
【C++11】final与override关键字和类的新功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值