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

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

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

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

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

一、Final 关键字

1. 作用

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

2.使用方法

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

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

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

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

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

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

(3) final的使用示例b5c28资讯网——每日最新资讯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;}

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

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

二、C++ Override 关键字

1.作用

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

2.使用方法

override关键字只能用于派生类中的成员函数,并且该函数必须覆盖基类中的同名虚拟函数。b5c28资讯网——每日最新资讯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的使用示例:b5c28资讯网——每日最新资讯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()函数是否确实覆盖了基类中的函数。b5c28资讯网——每日最新资讯28at.com

三、final和override的联合使用

在实际编程中,我们可以同时使用final和override关键字来实现更严格的类继承和虚函数重写控制。例如:b5c28资讯网——每日最新资讯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关键字用于明确指出派生类中的成员函数旨在覆盖基类中的同名虚拟函数。b5c28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top