首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C/C++ final和override关键字】那些比较重要的基础知识

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

作者头像
flos chen
发布2026-01-23 18:38:43
发布2026-01-23 18:38:43
940
举报

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

final 关键字

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

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

override 关键字

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

代码语言:javascript
复制
class Base {  
public:  
    virtual void func() {  
        // 基类实现  
    }  
};  
  
class Derived : public Base {  
public:  
    void func() override { // 明确表示覆盖 Base::func  
        // 派生类实现  
    }  
};

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

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • final 关键字
    • 修饰类:当一个类被声明为 final 时,意味着这个类不能被其他类继承。这有助于创建不可变的类结构,确保类的行为在继承体系中不会发生变化。
    • 修饰成员函数:当一个成员函数被声明为 final 时,意味着在子类中不能覆盖(Override)这个函数。这有助于确保某些关键函数的行为在继承体系中保持一致。
  • override 关键字
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档