c++拷贝构造函数(深拷贝,浅拷贝)详解

2023-11-03

一、什么是拷贝构造函数

      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:
int a=100;
int b=a;
 
  而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。
  下面看一个类对象拷贝的简单例子。
   
#include<iostream>
using namespace std;
class CExample
{
private:
    int a;
public:
    //构造函数
    CExample(int b)
    {
        a=b;
        printf("constructor is called\n");
    }
    //拷贝构造函数
    CExample(const CExample & c)
    {
        a=c.a;
        printf("copy constructor is called\n");
    }
    //析构函数
    ~CExample()
    {
        cout<<"destructor is called\n";
    }
    void Show()
    {
        cout<<a<<endl;
    }
};
int main()
{
    CExample A(100);
    CExample B=A;
    B.Show(); 
    return 0;
}
   运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。
  

 CExample(const CExample& C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一种 特殊的 构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个 引用变量

二、拷贝构造函数的调用时机
     1. 当函数的参数为类的对象时
  
  
#include<iostream>
using namespace std;
class CExample
{
private:
    int a;
public:
    CExample(int b)
    {
        a=b;
        printf("constructor is called\n");
    }
    CExample(const CExample & c)
    {
        a=c.a;
        printf("copy constructor is called\n");
    }
    ~CExample()
    {
     cout<<"destructor is called\n";
    }
    void Show()
    {
     cout<<a<<endl;
    }
};
void g_fun(CExample c)
{
    cout<<"g_func"<<endl;
}
int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++拷贝构造函数(深拷贝,浅拷贝)详解 的相关文章

随机推荐

  • 树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头

    问题描述 在树莓派上使用多个USB摄像头时 如何确定各个摄像头所对应的id 比如 当有两个摄像头时 我尝试一个为cv2 VideoCapture 0 一个为cv2 VideoCapture 1 通过看捕获的图像 可以确定各摄像头的id 但这
  • attachInterrupt()函数

    attachInterrupt 函数介绍 attachInterrupt 函数是用于为Arduino开发板设置和执行ISR 中断服务程序 用的 ISR 中断服务程序 顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序
  • 【CF补题】Codeforces Round #784 (Div. 4)C++代码

    A include
  • idea连接kerberos认证的hive

    其实用dbeaver连接hive就可以了 但是呢 idea也有这个功能 本着研究下的想法就试试 结果最后成功了 最后记录下 参考文章 感觉不太行 PyCharm idea通过插件database连接带Kerberos的hive 不饿同学的博
  • 服装商品销售数据分析

    一 分析背景和数据来源 随着电商的快速发展 人们的购物行为占比也快速增加 作为电商卖家为了获取更多的用户并提升店铺销售量 可以结合产品销售情况和用户情况进行分析 得到有价值的信息 规划自己的销售策略 本文以淘宝天猫上服装商品购买情况数据为例
  • Qt绘制雷达图(卫星轨迹图)

    效果图 功能 使用QPainter绘制 雷达图主要包括 同心圆 十字架 刻度 不同颜色的圆圈 可以设置卫星的俯仰角 方位角 程序采用系统与卫星的结合 多种系统 n个卫星数据 进行显示 可自行搭配数据结构 监测卫星活动状态 定时清理无数据卫星
  • 数值概率算法

    基本概念 计算定积分 rand和srand 在解决设计问题时 有时会用到概率算法 概率算法允许在执行过程中随机的选择下一步的计算步骤 又是可使算法大大降低复杂度 提高算法效率 但有时也可能得不到问题的全部答案 基本概念 概率算法大致分为4类
  • 【Python】list.append()字典在for循环中数据覆盖的分析与解决

    问题 预期打印出来的list为 num 0 num 1 num 2 结果为 num 2 num 2 num 2 list dictionary num for i in range 3 dictionary num i list appen
  • 安装bootstrap

    导入软件源的 GPG key 并且添加 Yarn APT 软件源到你的系统 curl sS https dl yarnpkg com debian pubkey gpg sudo apt key add echo deb https dl
  • USB

    usb有主从设备之分 主设备有 pc 现在市面上的那些插u disk即可播放mp3的 mp3 之类的 usb 信号是差分信号 信号线为D D 在usb host 端 D D 各接一个15kohm 的下拉电阻 而在usb device端 这时
  • ue打开服务器文件速度很慢,看完大牛这篇文章,再遇到服务器反映慢的情况就不怕了...

    最近服务器反映很慢 查看服务器上的应用程序经常出现超时等等 而且还有时候出现卡死的情况 经过发现服务器I O压力很大 压力来自硬盘的I O访问已经达到100 最后原因是线上业务代码同一时间写入导致服务器硬盘I O爆表了 我这里纪录一下为了方
  • Hadoop集群搭建记录

    本文目录 写在前面 step1 安装openssh server step2 ssh文件夹的创建及生成密钥文件 step3 传送该文件 step4 slave1 slave2节点操作 step5 所有节点最终配置 免密登录成功 写在前面 本
  • 原来早就有java代码规范

    happy 最近几天 研究代码规范 想给给公司制定一个代码规范 公司很小 目前还没有代码规范 这个东西很烦人 也很难产生作用 小公司一般不采用吧 但现在为了提高代码质量 也就需要考虑了 今天 发现早在1997年 SUN公司就制定了java代
  • logit回归模型_混合logit模型(随机参数模型)的STATA应用及结果解读

    选择实验获得的数据主要通过离散选择模型来完成 离散选择模型中 最主要的是logit模型 之前已经介绍了二项logit模型回归的STATA实现 有修改 多项logit模型详解 多项logit模型回归系数解读 多项logit模型回归的检验 继续
  • spring boot AOP练习 @Aspect

    spring boot AOP练习 Aspect 环境
  • 【测评】用这款神器2小时就撸完了1天工作量的代码!爽

    目 录 一 写在前面 二 测评信息 三 测评体验 3 1 安装方便 3 2 始于颜值 3 2 1 简约美观的主题 3 2 2 多变时尚的风格 3 3 忠于强大 3 3 1 快捷的搜索 3 3 2 丰富的功能 3 3 3 开发者神器 3 4
  • [LeetCode] 811. 子域名访问计数

    题目描述 一个网站域名 如 discuss leetcode com 包含了多个子域名 作为顶级域名 常用的有 com 下一级则有 leetcode com 最低的一级为 discuss leetcode com 当我们访问域名 discu
  • python android 录制屏幕

    def settingtime while True starttime time strftime H M S recordcmd adb shell screenrecord sdcard demo mp4 pullfile adb p
  • 开发者的时代红利在哪里?

    2021 年和 2022 年 也许给很多人上了一场关于 风险意识教育 的课程 无论你是 最难 毕业季中的应届毕业生 还是在职场中苦寻事业道路的各行从业者 这一课众生平等 在疫情影响之下 经济大环境动荡 要想在市场下行的背景下全身而退 就需要
  • c++拷贝构造函数(深拷贝,浅拷贝)详解

    一 什么是拷贝构造函数 首先对于普通类型的对象来说 它们之间的复制是很简单的 例如 int a 100 int b a 而类对象与普通对象不同 类对象内部结构一般较为复杂 存在各种成员变量 下面看一个类对象拷贝的简单例子 include