C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。

1. 构造函数   

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。   如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则如下:

1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式

构造函数不能为虚:

虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数

https://blog.csdn.net/LC98123456/article/details/81143102

要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。构造函数内联函数不可作为虚函数

2. 析构函数   

析构函数也不会被子类继承,只是在子类的析构函数中会调用父类的析构函数。

  • 如果没有将基类的析构函数定义为虚函数
    当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露

3. 赋值运算符重载函数   

赋值运算符重载函数也不会被子类继承,只是在子类的赋值运算符重载函数中会调用父类的赋值运算符重载函数。

哪些成员函数不能被继承相关推荐

  1. c++之哪些成员函数不能被继承

    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造).析构函数.赋值运算符重载函数. 一,构造函数  构造方法用来初始化类的对象,与父类的其它成 ...

  2. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  3. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  4. C++友元:友元函数、友元类和友元成员函数

    Table of Contents 1.友元函数 2.友元类 3.友元成员函数 友元小结: 参考资料: 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例 ...

  5. 基类成员函数和派生类成员函数不构成重载

    基类成员和派生类成员的名字一样时会造成遮蔽,这句话对于成员变量很好理解,对于成员函数要引起注意,不管函数的参数如何,只要名字一样就会造成遮蔽.换句话说,基类成员函数和派生类成员函数不会构成重载,如果派 ...

  6. 友元(友元函数、友元类、类成员函数的友元)

    友元(友元函数.友元类.类成员函数的友元) (friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类. 我们可以将友元大致分为3类: 友元函数 友元类 类成员函数的友元 一: ...

  7. C++11-列表初始化/变量类型推导/范围for/finaloverride/默认成员函数控制

    C++11-列表初始化/变量类型推导/范围for/final&override/默认成员函数控制 零.前言 一.C++11简介 二.列表初始化 1.内置类型列表初始化 2.自定义类型列表初始化 ...

  8. 继承规则及派生类的成员函数

    继承是面向对象复用的重要手段.通过继承定义一个类,继承是类型之间的关系建模,共享共有的东西,实现各自本质不同的东西. 成员访问限定符&继承关系: 这是一个简单的继承关系: #include&l ...

  9. Th3.9:友元函数、友元类、友元成员函数详述

     本博客将记录:类的相关知识点的第9节的笔记! (这个在学习C++基础课程时已经学习过一次了,这里再次简单地回顾一下而已) 今天总结的知识分为以下3个点:   一.友元函数(对于非成员函数而言)   ...

最新文章

  1. 日常生活 -- 嵌入式再学习前言
  2. Quartz实现动态定时任务
  3. 网站常见漏洞-- XSS攻击
  4. asp.net gridview 模板列 弹出窗口编辑_如何使用极速PDF编辑器的注释工具?
  5. java文件编译后,出现xx$1.class的原因
  6. android 视频录制 sdk,android视频录制实现方法
  7. Origin2018安装教程
  8. VS运行程序时遇到0xc0150002的问题
  9. c++new时赋初值_智慧树知到_C/C++程序设计案例实战_作业题库答案
  10. plc串口通讯 qt_QT与PLC通信
  11. java咖啡机如何清洗_这样清洗咖啡机最简单有效
  12. Oracle SQL Developer如何配置
  13. Day16:hash表
  14. 【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现(更新完毕)
  15. 领导力培养从特征入手
  16. 制作.ico透明图标
  17. S3C2440裸机------异常与中断__swi异常模式程序示例
  18. banner(图片轮播)框架的使用
  19. 基于AUTOSAR的车载以太网通信技术与实现
  20. (转载)win10装机问题:windows必须安装在格式化为ntfs的分区

热门文章

  1. Android - 定位方式,火星坐标系统,一键锁屏,嵌入式android开发
  2. pytorch实现DCGAN 生成人脸 celeba数据集
  3. Large-scale CelebFaces Attributes (CelebA) Dataset
  4. IDEA编译报错“程序包XXX不存在”
  5. transferTo 方法
  6. [附源码]Python计算机毕业设计Django-大学生健康档案管理
  7. Minio分布式集群搭建
  8. MySQL 8 复制(二)——半同步复制
  9. 教你用TensorFlow实现手写数字识别
  10. 使用Python+OpenCV进行图像处理(三)| 视觉入门