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

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

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

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

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

一、Final 关键字

1. 作用

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

2.使用方法

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

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

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

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

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

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

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

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

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

二、C++ Override 关键字

1.作用

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

2.使用方法

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

三、final和override的联合使用

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
Top