iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++成员函数后面加override问题
  • 494
分享到

C++成员函数后面加override问题

C++成员函数C++加override问题成员函数后加override 2022-11-13 19:11:36 494人浏览 八月长安
摘要

目录c++成员函数后面加overrideoverride虚析构函数使用技巧因此得到下面的写法C++成员函数后面加override class A {     virtual void

C++成员函数后面加override

class A
{
    virtual void foo();
}
class B :public A
{
   
    void foo() override; 
}

如果一个成员函数后面跟了一个override关键字,说明这个函数将重写这个函数,下面的方式也可以进行重写。

void foo(); 
virtual foo(); 

但是后面加override算是一种声明,此函数要重写同名函数,所以如果将函数的名字写错了比如写成f00则会报错,而下面的两个却不会,这样也可以提醒代码阅读者这是一个重写的函数。

override虚析构函数使用技巧

#include <cstdio>

class Base 
{
public:
    ~Base() { ::printf("base\n"); }
};

class Derived 
    : public Base 
{
public:
    ~Derived() { ::printf("derived\n"); }
};
Base *ptr = new Derived;
delete ptr;

由于父类析构函数不是虚函数,因此编译器只能找到父类析构函数,而无法通过续表找到子类析构函数,因此上例会造成内存泄漏,子类中的数据成员没法得到释放。最重要的是这种行为并不会被编译器察觉

因此effective c++建议,一个类一旦确认要被继承就应该在其析构函数前加上关键字virtual

因此得到下面的写法

#include <cstdio>

class Base
{
public:
    virtual ~Base() { ::printf("base\n"); }
};

class Derived 
    : public Base
{
public:
    ~Derived() { ::printf("derived\n"); }
};

如此,就不会出现多态下的内存泄漏问题。

但是!如果父类设计者忘记加关键字virtual,或者由于业务的需要,当前类必须被子类实现某些功能( interface-implement ),岂不是就会再次造成泄漏?

因此,作为子类的设计者,有义务提醒父类设计者,缺少关键字virtual,从而避免内存泄漏

C++11 新特性中的关键字override,编译器会检查基类中的虚函数和派生类中带有override的虚函数有没有相同的函数签名,一旦不匹配便会报错

因此子类设计者可以在其析构函数后增加关键字override,一旦父类缺少关键字virtual就会被编译器发现并报错

#include <cstdio>

class Base
{
public:
    virtual ~Base() { ::printf("base\n"); }
};

class Derived 
    : public Base
{
public:
    ~Derived() override { ::printf("derived\n"); }
};

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: C++成员函数后面加override问题

本文链接: https://www.lsjlt.com/news/170797.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++成员函数后面加override问题
    目录C++成员函数后面加overrideoverride虚析构函数使用技巧因此得到下面的写法C++成员函数后面加override class A {     virtual void...
    99+
    2022-11-13
    C++成员函数 C++加override问题 成员函数后加override
  • C++类成员函数后面加const问题
    目录C++类成员函数后面加constC++const四种用法一、用const修饰函数参数二、用const修饰局部或全局变量三、用const修饰函数返回值四、用const修饰函数C++...
    99+
    2022-11-13
    C++类成员函数 C++ const 类成员函数
  • mfc如何添加成员函数
    要添加一个成员函数到MFC类中,可以按照以下步骤进行操作:1. 打开MFC类的头文件(.h文件),通常位于项目的"类视图"窗口中。确...
    99+
    2023-09-07
    mfc
  • C++ 友元函数如何访问私有成员?
    c++++ 中友元函数访问私有成员的方法有两种:在类内声明友元函数。声明一个类作为友元类,该类中所有的成员函数都可以访问另一个类的私有成员。 C++ 友元函数访问私有成员的方法 友元函...
    99+
    2024-04-15
    友元函数 访问私有成员 c++
  • C++ 静态函数可以访问非静态成员函数吗?
    在 c++++ 中,静态函数不能直接访问非静态成员函数。解决方法包括:1. 通过对象指针访问;2. 通过类作用域运算符访问。 C++ 中静态函数访问非静态成员函数 在 C++ 中,静态...
    99+
    2024-04-17
    c++ 静态函数 作用域
  • C++ 友元函数能访问哪些类型成员?
    在 c++++ 中,友元函数可以访问类的所有公共、受保护和私有成员,但私有成员的访问受限,只能在类的成员函数调用时进行。 C++ 友元函数可以访问哪些类型成员? 什么是友元函数? 友元...
    99+
    2024-04-15
    类成员 友元函数 c++
  • C++中的类成员函数当线程函数
    目录类成员函数当线程函数解决方法一解决方法二解决方法三类成员函数作为多线程的入口类成员函数当线程函数 C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该...
    99+
    2022-11-13
    C++类成员函数 C++线程函数 C++成员函数
  • C++ 成员函数详解:对象方法的虚继承与钻石问题
    虚继承解决了多重继承中的“钻石问题”,其中一个类从两个或多个具有相同基类的子类继承时。通过在派生类的继承规范中使用 virtual 关键字,派生类不会获得基类的副本,而是通过指针间接访问...
    99+
    2024-04-29
    c++ 虚继承
  • C++ 成员函数的继承规则
    c++++ 成员函数继承规则:公有继承:派生类公有继承基类的成员函数,则派生类的成员函数也为公有。保护继承:派生类保护继承基类的成员函数,则派生类的成员函数为保护的。私有继承:派生类私有...
    99+
    2024-04-18
    c++ 继承
  • 详解C++类的成员函数做友元产生的循环依赖问题
    目录类的声明类的成员函数做友元以及可能产生的循环依赖问题情况一:B类的成员函数func是A类的友元,且B类不依赖A类情况二:类B的成员函数func成员函数是类A的友元,且B类依赖于不...
    99+
    2024-04-02
  • C++ 静态函数可以访问非静态数据成员吗?
    一般情况下,c++++ 静态函数不能访问非静态数据成员,但可以通过以下例外情况间接访问:指向非静态成员指针:静态函数可以拥有非静态数据成员的指针。接受非静态成员引用的参数:静态函数可以接...
    99+
    2024-04-16
    c++ 静态函数
  • C++ 函数重载是否适用于成员函数?
    是的,函数重载适用于成员函数,但受到以下限制:重载的成员函数必须具有不同的参数签名(类型和数量)。重载的成员函数不能具有相同的返回类型和不同的参数签名。 C++ 函数重载是否适用于成员...
    99+
    2024-04-13
    c++ 函数重载 成员函数
  • C++的静态成员变量和静态成员函数详解
    目录一.static修饰变量二.static修饰函数三.static在类中使用1.创建与初始化 2.使用问题 3.在public、private下static变量使用 四.class...
    99+
    2024-04-02
  • C++内联成员函数怎么使用
    本篇内容主要讲解“C++内联成员函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++内联成员函数怎么使用”吧!什么是内联函数:内联函数是C++的一个增强功能,可以减少程序的执行时间。...
    99+
    2023-06-22
  • C++成员函数中const如何使用
    本篇内容介绍了“C++成员函数中const如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!修饰入参首先我们要明白在C++中调用函数时存...
    99+
    2023-06-29
  • C++类的静态成员变量与静态成员函数详解
    目录1、类的静态成员变量2、静态成员函数总结1、类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成...
    99+
    2024-04-02
  • Vue页面加载完成后如何自动加载自定义函数
    目录页面加载完成后自动加载自定义函数createdmountedvue之自执行函数页面加载完成后自动加载自定义函数 created 在模板渲染成html前调用,即通常初始化某些属性值...
    99+
    2024-04-02
  • C++成员函数中const的使用详解
    目录修饰入参值传递址传递const修饰入参修饰返回值修饰函数总结const 在C++中是一个很重要的关键字,其不光可以用来修饰变量,还可以放在函数定义中,这里整理了其在函数中的三个用...
    99+
    2024-04-02
  • C++中如何使用成员函数指针
    C++中如何使用成员函数指针,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一个成员函数的指针指向类中的一个成员函数,并和以前有相同的参数,声明如下:float (...
    99+
    2023-06-17
  • 如何访问python的私有成员函数
    访问python私有成员函数的方法class Plane():# 私有属性__air_sister = "20个"# 公有绑定方法def fly(self):print("飞机会飞")# 公有普通方法def fly2():print("飞机...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作