子类拷贝构造函数会调用父类拷贝构造函数吗?

一. 编译器提供的默认子类拷贝构造函数会调用父类拷贝构造函数

#include <iostream>
#include <string>
using namespace std;

class Parent {
public:
    Parent(string home_address = "中国") : m_home_address(home_address) {
        cout << "调用父类构造函数" << endl;
    }
    Parent(const Parent &other) {
        m_home_address = other.m_home_address;
        cout << "调用父类拷贝构造函数" << endl;
    }
    string get_home_address() {return m_home_address;}
private:
    string m_home_address;
};

class Child : public Parent {
public:
    Child(string home_address = "") : Parent(home_address) {
        cout << "调用子类构造函数" << endl;
    }
private:
};

int main(int argc, char *argv[]) {
    Child c1("广州");
    cout << "c1 home_address = " << c1.get_home_address() << endl << endl;

    Child c2 = c1; // 调用了子类的默认拷贝构造函数
    cout << "c2 home_address = " << c2.get_home_address() << endl;
    return 0;
}

从打印的信息中,我们可以知道:

1. 创建一个对象 c1 时,先调用父类构造函数,后调用子类构造函数。

2. 创建 c2 对象时,执行了编译器提供的默认子类拷贝构造函数,具体构造顺序为:先调用父类拷贝构造函数,后调用编译器提供的默认子类拷贝构造函数。从而打印出 c2 home_address = 广州

二. 重写的子类拷贝构造函数默认不会调用父类的拷贝构造函数,而是调用父类默认构造函数

#include <iostream>
#include <string>
using namespace std;

class Parent {
public:
    Parent(string home_address = "中国") : m_home_address(home_address) {
        cout << "调用父类构造函数" << endl;
    }
    Parent(const Parent &other) {
        m_home_address = other.m_home_address;
        cout << "调用父类拷贝构造函数" << endl;
    }
    string get_home_address() {return m_home_address;}
private:
    string m_home_address;
};

class Child : public Parent {
public:
    Child(string home_address = "") : Parent(home_address) {
        cout << "调用子类构造函数" << endl;
    }
    Child(const Child &other) {
        cout << "调用子类拷贝构造函数" << endl;
    }
private:
};

int main(int argc, char *argv[]) {
    Child c1("广州");
    cout << "c1 home_address = " << c1.get_home_address() << endl << endl;

    Child c2 = c1; // 调用了子类的默认拷贝构造函数
    cout << "c2 home_address = " << c2.get_home_address() << endl;
    return 0;
}

从打印的信息中,我们可以知道:

创建 c2 对象时,执行了子类拷贝构造函数,具体构造顺序为:先调用父类默认构造函数,后调用子类拷贝构造函数。从而打印出 c2 home_address = 中国

三. 重写的子类拷贝构造函数时应当显式的告诉编译器去调用父类的拷贝构造函数去构造父类,从而避免调用子类拷贝构造函数去创建一个对象时,导致子类中包含父类的那部分数据丢失的情况发生。具体做法为:Child(const Child &other) : Parent(other);

#include <iostream>
#include <string>
using namespace std;

class Parent {
public:
    Parent(string home_address = "中国") : m_home_address(home_address) {
        cout << "调用父类构造函数" << endl;
    }
    Parent(const Parent &other) {
        m_home_address = other.m_home_address;
        cout << "调用父类拷贝构造函数" << endl;
    }
    string get_home_address() {return m_home_address;}
private:
    string m_home_address;
};

class Child : public Parent {
public:
    Child(string home_address = "") : Parent(home_address) {
        cout << "调用子类构造函数" << endl;
    }
    Child(const Child &other) : Parent(other) {
        cout << "调用子类拷贝构造函数" << endl;
    }
private:
};

int main(int argc, char *argv[]) {
    Child c1("广州");
    cout << "c1 home_address = " << c1.get_home_address() << endl << endl;

    Child c2 = c1; // 调用了子类的默认拷贝构造函数
    cout << "c2 home_address = " << c2.get_home_address() << endl;
    return 0;
}

从打印的信息中,我们可以知道:

创建 c2 对象时,执行了子类拷贝构造函数,具体构造顺序为:先调用父类拷贝构造函数,后调用子类拷贝构造函数。从而打印出 c2 home_address = 广州

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203844.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文让你深入了解JavaSE的知识点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

车辆动力学 | 轮胎纵滑和侧滑下的简化模型

1、轮胎模型的定义&#xff1a; ——反应轮胎力学性能&#xff08;所有侧向力、纵向力以及会正力矩等&#xff09;与侧偏角和运动状态&#xff08;滑转率和滑移率&#xff09;关系的数学模型 2、四个组成部分 胎面层、带束层、胎体、轮辋 3、简化模型的假设条件 4、起滑点&am…

深度学习毕设项目 医学大数据分析 - 心血管疾病分析

# 1 前言 &#x1f6a9; 基于大数据的心血管疾病分析 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 1 课题背景 本项目的任务是利用患者的检查结果预测心血管疾病(CVD)的存在与否。 2 数据…

网络安全应该怎么学?(0基础小白)

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

详解云WAF:免费GOODWAF归来

文前聊心 说说这篇文章的目的&#xff1a; 介绍一下自己的开发升级的项目&#xff1a;GOODWAF&#xff0c;看名字也能看的出来这是一款防火墙&#xff0c;但它不同于现在的软件防火墙&#xff0c;它是一款云WAF防火墙。 其实GOODWAF这个IP概念前两年就存在了&#xff0c;但为什…

基于Java SSM框架+Vue实现房屋租赁网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现房屋租赁网站演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际运用为开发背景&…

C++模拟实现unordered_map和unordered_set

目录 1.了解哈希表 1.哈希表 1.他的实现原理就是&#xff1a; ​编辑 2.写单个数据的类型&#xff08;这边先模拟map的kv类型&#xff0c;后面会再一起改&#xff0c;这边先一步步的先简单实现他&#xff09; 3.封装整个类&#xff1a; 4.哈希表中存储string 2.哈…

Unity中Shader优化通用规则

文章目录 前言一、精度优化1、三种精度 fixed / half / float2、位置坐标、物理坐标类使用float3、HDR颜色、方向向量类使用half4、普通纹理、颜色类使用 fixed5、实际上&#xff0c;使用的精度取决于 平台 和 GPU6、现在桌面级GPU都是直接采用 float , Shader中的 fixed / hal…

【Linux】ln命令使用

ln命令 ln是linux中又一个非常重要命令&#xff0c;请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同步的链接&#xff0c;这个命令最常用的参数是-s&#xff0c;具体用法是&#xff1a;ln –s 源文件 目标文件。 当我们需要在不同的目录&#xff0c;用到相…

分享5款靠谱好用,无广告不流氓的好软件

​ 话不多说&#xff0c;直入正题&#xff0c;全都是靠谱好用&#xff0c;无广告不流氓的好软件&#xff0c;可以先点赞收藏&#xff0c;以后慢慢用。 1.动态壁纸软件——Lively Wallpaper ​ Lively Wallpaper是一款可以将视频、GIF、网页、游戏等内容作为桌面壁纸的软件&am…

移动硬盘显示容量不显示文件怎么办?五种解决方法

移动硬盘是一种常用的便携式存储设备&#xff0c;可以方便地备份和传输大量的数据文件。然而&#xff0c;有时我们可能会遇到一个问题&#xff0c;即移动硬盘显示容量不显示文件怎么办&#xff1f;本文将介绍几种解决方法&#xff0c;希望能帮助大家有效解决问题。 方法一、检…

【JavaWeb】会话过滤器监听器

会话&过滤器&监听器 文章目录 会话&过滤器&监听器一、会话1.1 Cookie1.2 Session1.3 三大域对象 二、过滤器三、监听器3.1 application域监听器3.2 session域监听器3.3 request域监听器3.4 session域的两个特殊监听器3.4.1 session绑定监听器3.4.2 钝化活化监听…

IEC60730-1 Annex-H

IEC-60730安全标准法规由国际电工委员会 ( IEC ) 制定&#xff0c;该安全标准定义了家用电器嵌入式控制软件与硬件安全操作的测试与检测方法&#xff0c;以确保家电中受控设备的安全操作。IEC-60730将家用电器分为3类&#xff1a; A类 – 不用于确保设备的安全性。 例如&#…

深入了解Java8新特性-日期时间API之TemporalQuery、TemporalQueries

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概2000多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

国外客户跟我要佣金,该给不该给?

“Jack&#xff0c;这次你要是不帮我&#xff0c;我就死定了&#xff01;” 收到美国公司采购Antony的信息时&#xff0c;我有些哭笑不得&#xff0c;因为在我电脑屏幕上除了他的信息外&#xff0c;还有来自他公司监察部门的邮件&#xff1a; “jack先生&#xff0c;我们调查…

PostgreSQL-SQL联表查询LEFT JOIN 数据去重复

我们在使用left join联表查询时&#xff0c;如果table1中的一条记录对应了table2的多条记录&#xff0c;则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…

go elasticsearch 测试实例

// 查询列表数据 func QueryOperateList(ctx context.Context, esClient *elastic.Client, index string, pageNum, pageSize int, start, end int64, execSql string, list []interface{}, operateAccount string, operateAddr string, maxRows, minRows int, dbAddr, namespa…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

抖音直播招聘报白如何提高求职者体验?

为了提升抖音直播招聘报白中求职者的体验&#xff0c;以下是一些建议&#xff1a; 提供清晰的招聘流程和信息。在直播招聘开始之前&#xff0c;企业或人力资源公司应提供清晰的流程和信息&#xff0c;包括直播时间和直播平台&#xff0c; 职位信息&#xff0c;招聘要求等&…