当前位置: 首页 > 编程日记 > 正文

继承和多态 2.0 -- 继承的六个默认成员函数

本文重要介绍普通继承中如何写派生类的六个默认成员函数,主要是针对在派生类中,如何调用基类的六个默认成员函数

需要说明的一点就是,如果子类中没有调用父类的函数时,系统会自动生成一个。

构造函数

子类中有父类的成员,子类首先需要调用父类的构造函数,然后调用自己的构造函数。如果没有调用父类的构造函数,系统会自动生成一个。

在构造函数中,我们使用父类的匿名对象完成初始化。看下面的代码

class A
{
public:A(int a = 0):_a(a){}
private:int _a;
};class B : public A
{
public:B(int a = 0,int b = 1):A(a),_b(b){}
private:int _b;
};

上面的例子我们可以看出来,当我们写子类B的构造函数的时候,首先需要先调用 父类的匿名构造函数,完成对子类中包含的父类成员的初始化的工作。

拷贝构造函数

拷贝构造函数需要和构造函数区分开,因为我们的构造函数的参数是可变的,我们可以根据需要,为子类中包含的父类成员传递参数,但是在拷贝构造函数中,我们只能够传递的是子类的对象的引用,但是这个时候我们实际上还是可以调用父类的拷贝构造函数的,根据我们上一篇文章中学习过的赋值兼容规则,子类的对象是可以赋值给父类的对象的,所以这个时候我们可以拿子类的对象去实例化子类中包含的父类成员。此时实际上采用 的还是父类匿名对象。

拷贝构造函数应该写成是下面的形式

B(const B& b):A(b),_b(b._b){}

这里语法规定子类中初始化父类的时候,必须在初始化列表中初始化父类,包括我们上面的构造函数也是这个样子,必须在初始化列表中初始化父类

赋值运算符的重载

拷贝构造函数应该如何使用呢,还是上面的思想,我们需要那子类的对象去为父类赋值,所以这个时候,我们可以在子类的赋值运算符重载的函数内部,调用父类的赋值运算符重载的函数,对父类的对象进行赋值。

B& operator=(const B& b){if (this != &b){operator=(b);_b = b._b;}return *this;}

但是上面的问题,会出现一个问题就是,栈溢出,为什么会出现这样的问题呢,主要是在调用父类的赋值运算符重载的 时候,实际上是并没有调用父类的赋值运算符重载,这里调用的是子类的,这样子就形成了递归了,然后会一直调用下去。

解决办法是这样的,我们需要在调用父类的函数前面加上一个作用域限制符。
A::operator(b);

这里为什么会调用子类的赋值运算符的重载呢,实际上是子类的函数名和父类的函数名构成了重定义,这个时候如果不加上作用域限制符就会出现问题了

析构函数

这里在写子类的析构函数的时候,是不允许子类调用父类的析构函数的,有两个原因

  • 因为栈帧的关系,后开辟的空间先释放掉,意思就是说,父类是先开辟的空间,应该后释放,为了防止程序员写错代码,先释放了父类的,这个时候就会出现问题,所以要求自动的调用父类的析构函数
  • 如果我们在实现析构函数的时候,忘记释放了,这个时候就会造成内存泄漏了,造成资源的浪费

基于上面的一些原因,要求就是只需要由系统自动的调用父类的析构函数即可。

相关文章:

js 让鼠标右下角有一排小字_js布局中一排大字下面接着一排小字怎么打出来?...

展开全部可以使用 TypewriterJS 实现效果是这样 ,百度图片少了一部分,可以通过链接32313133353236313431303231363533e78988e69d8331333433626438看效果链接: 网页链接示例在这里: 网页链接文档地址: 网页链接使用步骤引用 TypewriterJShtmlcss.article__title {fon…

Hudson神奇的环境变量

Hudson神奇的环境变量 http://blog.sina.com.cn/s/blog_798f21a00100z6zw.html转载于:https://blog.51cto.com/myloveworld/950156

英语影视台词---四、Sideways

英语影视台词---四、Sideways 一、总结 一句话总结:杯酒人生 Sideways,大致意思是“偏离、倾斜、转向…”。很明显中文译名与英文原名并没有什么关联,《杯酒人生》这个名字,其实也可以译为《并肩前行》,应该是从影片内…

继承和多态 3.0 -- 菱形继承

单继承和多继承 C的继承方式是支持单继承和多继承的,首先看一下代码,分清单继承和多继承 单继承 class A { public:int _a; };class B :public A { public:int _b; };class C : public A { public:int _c; }; 类似于上面的方式就是单继承,或…

C# split 几种使用方法

第一种方法: string s "abcdeabcdeabcde"; string[] sArray s.Split(c); foreach (string i in sArray) Console.WriteLine(i.ToString()); Console.ReadKey();输出下面的结果:abdeabdeabd…

模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

先从纯文本搜索讲起,这是最基本也是最重要的。从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能。注意,这几篇文章中谈论的都是基本的、正常的搜索功能,暂时不考虑Bug等因素。在很多软件(例如wor…

EXT3与EXT4的主要区别

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的…

Java IO 4 : RandomAccessFile

RandomAccessFile:   认识:java输入/输出流体系中功能最丰富的文件内容访问类 既可以读取文件内容,也可以向文件传输数据,并且支持“随机访问“的方式,程序可以跳转到任意地方来读写数据。 特点:与OutputStream/Writ…

二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解

树的结构主要是为了查找,这个主要是为了搜索,树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的,所以这个时候我们需要定义的一种结构就是,一个节点的孩子是可以动态的增加的&#xff0…

impala 本年格式化时间_hive,hbase,impala之间的对比

hbase在三者中更注重的是存储,它实现了类似mysql的double write机制,但是它是一种NoSQL的数据库,并且是可以支持列式存储的,算是比较大的一个内存Hash表。hbase也采用了类似mysql中的mvcc的思想通过时间戳来做版本控制。hbase是在…

简单上手的游戏引擎

物理游戏引擎 GameSalad 转载于:https://www.cnblogs.com/sgdkg/archive/2013/06/14/3135882.html

Linux内核中关于定时器Timer的应用

2019独角兽企业重金招聘Python工程师标准>>> 在Touchscreen驱动中 1 声明 Ad7877.c (\linux-2.6.30.4\drivers\input\touchscreen): struct timer_list timer; /* P: lock */ 2 初始化 在函数 static int __devinit ad7877_probe(struct spi_device *spi) 中 执行 …

类加载过程中几个重点执行顺序整理

类的加载过程: 1、 JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区 2、 在.class加载到方法区时,会分为两部分加载:先加载非静态内容&#xff…

二叉树 2.0 -- 非递归遍历

二叉树递归遍历存在的问题 如果我们的二叉树只有左子树,而且树的高度还很深的时候,这个时候递归调用遍历的时候,栈帧空间开辟的较大,很可能造成栈溢出。但是我们一个程序中,为堆分配的空间要比栈大的多,这…

田忌赛马贪心算法_田忌赛马 贪心算法

算法实验课回顾田忌赛马问题描述&#xff1a;你一定听说过田忌赛马的故事吧&#xff1f;如果3匹马变成n匹(n<100)&#xff0c;齐王仍然让他的马按照优到劣的顺序初赛&#xff0c;田忌可以按任意顺序选择他的赛马出赛。赢一局&#xff0c;田忌可以得到200两银子&#xff1b;输…

[转][小结][三种方法]实现WPF不规则窗体

实现WPF不规则窗体的三种常用的方法如下&#xff1a; 1.使用Blend等工具绘制一个不规则xaml&#xff0c;然后作为窗体的背景。这个可以参考xiaowei0705的这篇博文&#xff1a;WPF制作不规则的窗体 。 2.给window的Clip属性赋Path值。这个可以参考DebugLZQ前面的博文&#xff1a…

VirtualBox虚拟机网络连接设置的四种方式

这里我先给大家大致讲解下VBox的网络配置及应用。 VirtualBox的提供了四种网络接入模式&#xff0c;它们分别是&#xff1a;1、NAT 网络地址转换模式(NAT,Network Address Translation)2、Bridged Adapter 桥接模式3、Internal 内部网络模式4、Host-only Adapter 主机…

redis-deskmanager 连不上 虚拟机 - centos redis

1、没设置redis密码 &#xff1a; https://blog.csdn.net/HUXU981598436/article/details/54668779 2、关闭防火墙 转载于:https://www.cnblogs.com/Jomini/p/9650650.html

数据库1.0 -- 数据库的基本操作

安装数据库 安装数据库的时候我们需要安装三个软件&#xff0c;使用下面的命令&#xff0c;可能还会出现一些问题&#xff0c;关于数据库的安装&#xff0c;大家可以上网自行百度 yum install mysql yum install mysql-server yum install mysql-devel 我个人的理解大概是这…

12,缓冲运动。匀速运动停止条件

缓冲运动&#xff1a;iSpeed(iTarget-oDiv.offsetLeft)/7;速度离目标点越远&#xff0c;速度越大&#xff0c;离目标点越近速度越小&#xff1b; 只支持1px是最小单位&#xff0c;没有0.5px。所以当iSpeed为小数时如&#xff08;0.7&#xff09;&#xff0c;oDiv.style.LeftoDi…

如何配置mac的mysql环境_mac安装mysql数据库及配置环境变量

安装mysql下载mysql。我下载的是&#xff1a;mysql-8.0.11-macos10.13-x86_64.dmg双击打开mysql-8.0.11-macos10.13-x86_64.dmg&#xff0c;然后双击mysql-8.0.11-macos10.13-x86_64.pkg一路点击继续&#xff0c;傻瓜式安装&#xff0c;没什么好说的此处选择“Use Legacy Passw…

三层交换机vlan间访问(第一种方式)

真的是原创&#xff0c;但是得感谢Ys_routesim软件的制作方。我将命令调试后并进行了解释。若是属于侵权&#xff0c;请立即告知我。不过学习了网工后&#xff0c;大段解读源代码不属于侵权吧。呵呵。 交换机的三层交换实际是具有路由功能的交换机&#xff0c;比如思科的Cisco …

(转载)深入浅出设计模式——桥接模式(Bridge Pattern)

模式动机设想如果要绘制矩形、圆形、椭圆、正方形&#xff0c;我们至少需要4个形状类&#xff0c;但是如果绘制的图形需要具有不同的颜色&#xff0c;如红色、绿色、蓝色等&#xff0c;此时至少有如下两种设计方案&#xff1a; 第一种设计方案是为每一种形状都提供一套各种颜色…

数据库2.0 -- 数据类型和数据表的基本操作

mysql支持多种数据类型&#xff0c;一般可以分为&#xff0c;数值&#xff0c;日期时间和字符&#xff08;串&#xff09; 数值类型 日期和时间类型 字符串类型 创建数据表 我们首先应该明白的就是一个结构的问题&#xff0c;一个用户可以管理多个数据库&#xff0c;每个数据…

virtual hust 2013.6.20 数论基础题目 D - Just the Facts

题目&#xff1a;Just the Facts 思路&#xff1a;枚举10000素数内&#xff0c;各因子出现的次数&#xff0c;然后取模为10。因为0是由2和5构成的&#xff0c;所以2和5的幂单独讨论&#xff0c;同时由于2的幂肯定大于5的&#xff0c;所以我们最后要算的再乘上2的减去后的幂就可…

MySQL中字段约束有哪些_mysql字段约束

为了确保数据的完整性和唯⼀性&#xff0c;关系型数 据库通过约束机制来实现目。一. unique 唯一性约束值不可重复&#xff1b;二. not null 非空约束值不可为空&#xff1b;三. default 默认值约束当增加数据时没有插⼊值时&#xff0c;会自动插⼊默认值&#xff1b;四. chec…

关于软件测试中那点小事中的大道理

如果想让测试在公司的项目中发挥出它最大的价值&#xff0c;并不是招两个测试技术高手&#xff0c;或引入几个测试技术&#xff0c;而是测试技术对项目流 程的渗透&#xff0c;以及测试流程的改进与完善。虽然&#xff0c;当然测试行业前景乐观&#xff0c;许多中小企业也都在引…

每日一题 -- 11-1

一天十题选择&#xff0c;一天一道编程&#xff0c;一天一个面试题&#xff0c;一个一个剑指offer 排序是必须要掌握的一个算法&#xff0c;非常的重要 题目描述 有 n 个学生站成一排&#xff0c;每个学生有一个能力值&#xff0c;牛牛想从这 n 个学生中按照顺序选取 k 名学…

Java中? extends T和? super T的理解

? 通配符类型 - <? extends T> 表示类型的上界&#xff0c;表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界&#xff08;Java Core中叫超类型限定&#xff09;&#xff0c;表示参数化类型是此类型的超类型&#xff08;父类型&#xff09;&…

学习Modern UI for WPF

这两天断断续续的学了学Modern UI for WPF 没啥学习笔记呵呵&#xff0c;来自大牛王春明的博客园 http://www.cnblogs.com/wangchunming/category/342887.html 此大牛学习范围之广 成果之丰富 着实是学习的典范转载于:https://www.cnblogs.com/DragonX/p/3146818.html