【C/C++ final和override关键字】那些比较重要的基础知识

在C++中,final和override是两个非常重要的关键字,它们主要用于类成员的继承和覆盖(Overriding)过程中,以增强代码的可读性和安全性。下面分别解释这两个关键字的用法和作用。

final 关键字

final 关键字可以用于修饰类(使得类不能被继承)或类的成员函数(使得该函数在子类中不能被覆盖)。使用 final 可以明确表达设计者的意图,防止类的滥用或误用。

修饰类:当一个类被声明为 final 时,意味着这个类不能被其他类继承。这有助于创建不可变的类结构,确保类的行为在继承体系中不会发生变化。
class Base final {  
public:  
    void func() {  
        // 实现  
    }  
};  
 
// 尝试继承 Base 会导致编译错误  
class Derived : public Base {}; // 错误:Base 是 final 的
修饰成员函数:当一个成员函数被声明为 final 时,意味着在子类中不能覆盖(Override)这个函数。这有助于确保某些关键函数的行为在继承体系中保持一致。
class Base {  
public:  
    virtual void func() final {  
        // 实现  
    }  
};  
 
class Derived : public Base {  
public:  
    void func() override { // 错误:func() 在 Base 中被声明为 final  
        // 尝试覆盖  
    }  
};

override 关键字

override 关键字用于明确表示一个成员函数是覆盖基类中的虚函数。使用 override 可以让编译器检查覆盖是否成功,如果基类中没有相应的虚函数被覆盖,编译器会报错。这有助于避免由于函数签名不匹配而导致的覆盖失败问题。

class Base {  
public:  
    virtual void func() {  
        // 基类实现  
    }  
};  
  
class Derived : public Base {  
public:  
    void func() override { // 明确表示覆盖 Base::func  
        // 派生类实现  
    }  
};

如果 Derived::func 的签名与 Base::func 不匹配(比如参数类型或返回类型不同),使用 override 会导致编译错误,从而及时发现问题。

总结

final 关键字用于防止类被继承或成员函数被覆盖,增强设计的封闭性和安全性。
override 关键字用于明确表示成员函数是覆盖基类中的虚函数,提高代码的可读性和可维护性,同时编译器会检查覆盖的正确性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flos chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值