当前位置:首页 > 科技  > 软件

Final & Override :掌握现代C++的继承和多态

来源: 责编: 时间:2024-04-29 09:08:36 266观看
导读C++编程语言中,final和override是两个重要的关键字,它们用于增强类的继承和多态机制。我们就可以使用这两个关键字来帮助我们实现这些功能,这两个关键字在C++11标准中被引入。一、Final 关键字1. 作用final关键字用于标

C++编程语言中,final和override是两个重要的关键字,它们用于增强类的继承和多态机制。我们就可以使用这两个关键字来帮助我们实现这些功能,这两个关键字在C++11标准中被引入。IjT28资讯网——每日最新资讯28at.com

IjT28资讯网——每日最新资讯28at.com

一、Final 关键字

1. 作用

final关键字用于标识一个类或成员函数,表示它不能被继承或覆盖。当应用于类时,它指示该类不能被其他类继承。当应用于成员函数时,它指示该函数不能在派生类中被覆盖。IjT28资讯网——每日最新资讯28at.com

2.使用方法

(1) 类的用法IjT28资讯网——每日最新资讯28at.com

当final关键字用于类时,表示该类不能被继承。IjT28资讯网——每日最新资讯28at.com

class Base final {    // 类Base不能被继承};

(2) 成员函数的用法IjT28资讯网——每日最新资讯28at.com

当final关键字用于成员函数时,表示该函数不能在派生类中被覆盖。IjT28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() final {        // func函数不能在派生类中被覆盖    }};

(3) final的使用示例IjT28资讯网——每日最新资讯28at.com

class Base final {public:    virtual void func() final {        std::cout << "Base::func()" << std::endl;    }};// 错误:无法从final类Base继承class Derived : public Base {    // 错误:无法覆盖final函数func()    // virtual void func() override {    //     std::cout << "Derived::func()" << std::endl;    // }};int main() {    Base base;    base.func();    return 0;}

IjT28资讯网——每日最新资讯28at.com

在这个示例中,类Base被标记为final,因此不能被其他类继承。同样,成员函数func()也被标记为final,因此不能在派生类中被覆盖。IjT28资讯网——每日最新资讯28at.com

二、C++ Override 关键字

1.作用

override关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数。这有助于编译器检查派生类中的函数是否确实覆盖了基类中的函数,从而提高了代码的可靠性和可维护性。IjT28资讯网——每日最新资讯28at.com

2.使用方法

override关键字只能用于派生类中的成员函数,并且该函数必须覆盖基类中的同名虚拟函数。IjT28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() override {        std::cout << "Derived::func()" << std::endl;    }};

override的使用示例:IjT28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() override {        std::cout << "Derived::func()" << std::endl;    }};int main() {    Base* basePtr = new Derived();    basePtr->func(); // 输出:Derived::func()    delete basePtr;    return 0;}

在这个示例中,派生类Derived中的func()函数使用了override关键字,明确表示它旨在覆盖基类Base中的同名虚拟函数。这有助于编译器检查func()函数是否确实覆盖了基类中的函数。IjT28资讯网——每日最新资讯28at.com

三、final和override的联合使用

在实际编程中,我们可以同时使用final和override关键字来实现更严格的类继承和虚函数重写控制。例如:IjT28资讯网——每日最新资讯28at.com

class Base {public:    virtual void func() {}};class Derived : public Base {public:    void func() final override { // 正确重写了Base::func(),并且禁止进一步重写        // ...    }};class WrongDerived : public Derived {public:    void func() override { // 编译错误,Derived::func()已经禁止重写        // ...    }};

总结

final和override是C++11标准引入的两个关键字,它们为类的继承和多态机制提供了更多的控制权和明确性。final关键字用于指示一个类或成员函数不能被继承或覆盖,而override关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数。IjT28资讯网——每日最新资讯28at.com

IjT28资讯网——每日最新资讯28at.com

通过对final和override关键字的理解和运用,我们可以更加安全、清晰地设计和实现C++程序。IjT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86349-0.htmlFinal &amp; Override :掌握现代C++的继承和多态

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#中使用AES加密和解密JSON数据

下一篇: Python开发利器:Docopt模块帮你轻松解析命令行参数!

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
Top