调用拷贝构造函数的三种情况

2023-11-18

1   当用类的一个对象去初始化类的另一个对象时。

    如下代码中的  Rectangle  p2(p1),  //用对象p1去初始化对象p2,拷贝构造函数被调用(代入法)

   还有一种是赋值法  Rectangle   p2=p1;


2  当函数的形参是类的对象,调用函数进行形参和实参的结合时。例如

void fun1(Rectangle p)//形参是类Rectangle的对象p

{

    p.disp();

}

int main()

{

   Rectangle p1(10,20);

   fun1(p1);//调用函数fun1时,实参p1是类Rectangle的对象,将调用拷贝构造函数时,初始化形参对象p;

   return 0;

}

   在main()函数内,执行语句“fun(p1)”,便是这种情况,在调用这个函数时,对象p1是实参,用它来初始化被调用函数的形参p时,需要调用拷贝构造函数;


3  当函数的返回值是对象,函数执行完成返回调用者时,例如:

Rectangle fun2()

{

   Rectangle p1(10,30);

   return p1;  //函数的返回值是对象

}

int main()

{

   Rectangle p2;

  p2=fun2();  //函数执行完成,返回调用者时,调用拷贝函数;

  return 0;

}

在函数fun2()内,  执行语句“return p1”,将会调用拷贝构造函数将p1的值复制到一个无名对象中,这个无名对象是编译器系统在主程序中临时创建的。

函数运行结束时对象p1消失,但临时对象会存在于语句“p2=fun2()”中。执行完这条语句,临时无名对象的使命也就完成了,该临时对象便自动消失了;

   //如果你的编译器对于第三种情况与该例不符合,请阅读我的文章

C++返回值为对象时复制构造函数不执行怎么办?

代码样例如下:

#include<iostream>
using namespace std;
class Rectangle
{
public:
    Rectangle(int len=10,int wid=10);
    Rectangle(const Rectangle &p);
    void disp()
    {
        cout<<length<<"  "<<width<<endl;
    }
private:
    int length;
    int width;
};


Rectangle::Rectangle(int len,int wid)
{
    length=len;
    width=wid;
    cout<<"using normal constructing..."<<endl;
}
Rectangle::Rectangle(const Rectangle &p)
{
    length=2*p.length;
    width=2*p.width;
    cout<<"using copy constructing..."<<endl;
}
void fun1(Rectangle p)
{
    p.disp();
}
Rectangle fun2()
{
    Rectangle p4(10,30);
    return p4;
}
int main()
{
    Rectangle p1(30,40);
    p1.disp();
    Rectangle p2(p1);
    p2.disp();
    Rectangle p3=p1;
    p3.disp();
    fun1(p1);
    p2=fun2();
    p2.disp();
    return 0;
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用拷贝构造函数的三种情况 的相关文章

随机推荐

  • python request要求接口参数必须是json数据

    Reqeusts支持以form表单形式发送post请求 只需要将请求的参数构造成一个字典 然后传给requests post 的data参数即可 data参数的格式如下 content type在header中设置 1 data为dict时
  • 线代:1.3矩阵的逆

    文章目录 任务详解 矩阵的逆 一定是方阵 先导知识 逆的定义 定理1 定理2 逆矩阵的性质 本课程来自深度之眼 部分截图来自课程视频 第一章 线性代数 1 3矩阵的逆 在线LaTeX公式编辑器 任务详解 1 掌握矩阵逆的来源 可逆的充要条件
  • Nginx 安装与部署配置以及Nginx和uWSGI开机自启

    下载 官方网站 https nginx org en download html Windows下安装 安装 下载后解压 切记不能含有中文路径 文件结构如图 我解压的路径就有中文 记得拷贝放置于英文目录下即可 启动 两种方法 1 直接双击该
  • 多线程实现字典系统(server+client)

    多线程字典系统实现 首先说明下该系统可以实现的功能 小白都可以 该博客只提供学习和实现的思路 如果需要详细的代码 请留言 1 具体要求 简单来说 就是实现服务器端和客户端 可以做到多个客户端并发对字典中的数据进行操作 但是不考虑跨局域网的情
  • java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory

    java lang NoClassDefFoundError org mybatis logging LoggerFactory 目录 文章目录 后记 内容 问题如题目所示 这种情况通常由依赖冲突导致 解决方案如下 说明 本人使用IDE为i
  • java版 SpringCloud 之目前得前端框架都有哪些?

    1 AngularJS Angular JS 是一个有Google维护的开源前端web应用程序框架 它最初由Brat Tech LLC的Misko Hevery于2009年开发出来 Angular JS是一个模型 视图 控制器 MVC 模式
  • 通达信资金净流入公式_通达信资金净入净出指标公式

    额 AMOUNT 10000000 NODRAW VAR1 AMOUNT HIGH LOW 2 ABS CLOSE OPEN 流入亿 IF CLOSE gt OPEN VAR1 HIGH LOW IF CLOSE 流出亿 IF CLOSE
  • 【数据库】期末复习总结

    第一章 概念 数据库定义 是一种依照特定数据模型组织 存储和管理数据的文件集合 数据库和普通文件区别 支持不同应用对数据共享访问 数据管理复杂 可独立于应用 管理由DBMS实现 数据模型定义 描述事物对象的数据结构组成 数据语义联系 数据约
  • 实战22:文本摘要实战:基于句子相似度矩阵构建图结构实现文本摘要 代码+数据

    任务描述 自动文本摘要 Text Summarization 是指给出一段文本 我们从中提取出要点 然后再形成一个短的概括性的文本 自动的文本摘要是非常具有挑战性的 当我们作为人类总结一篇文章时 我们通常会完整地阅读它以发展我们的理解 然后
  • Pycharm和Python关系

    Pycharm和Python关系 简单来说 Pycharm是一个代码编辑器 是目前最流行的代码编辑器之一 用于编写python代码 Python是一个代码解释器 用于将Python代码翻译成计算机可以理解的指令 Pycharm下载地址 Py
  • OpenGL 入门 10:光源

    点光源 点光源的强度需要随着距离增加而减少 至于减少的系数公式大致如下 在这里d代表了片段距光源的距离 接下来为了计算衰减值 我们定义3个 可配置的 项 常数项Kc 一次项Kl和二次项Kq 常数项通常保持为1 0 它的主要作用是保证分母永远
  • Linux Kernel调度管理之task_struct

    task struct是进程描述符 struct task struct ifdef CONFIG THREAD INFO IN TASK For reasons of header soup see current thread info
  • 敌人进入攻击范围

    笔记 首先要用到游戏对象组件collider 添加组建collider给检测对象和被检测对象 检测对象的 IS trigger 要勾选 两个对象必须有一个添加了rigidbody组建 可以使用edit 中project中的physical进
  • Faster RCNN代码理解(Python)

    最近开始学习深度学习 看了下Faster RCNN的代码 在学习的过程中也查阅了很多其他人写的博客 得到了很大的帮助 所以也打算把自己一些粗浅的理解记录下来 一是记录下自己的菜鸟学习之路 方便自己过后查阅 二来可以回馈网络 目前编程能力有限
  • public boolean isAdmin(String adminId,String adminPwd)

    package cn edu zjgsu book biz import java sql Connection import java sql ResultSet import java sql SQLException import j
  • 报错Installation failed with message Failed to finalize session : INSTALL_FAILED_DUPLICATE_PERMISSION

    遇到这个报错问题 其实是真的挺受用的 把外包项目拿到手之后 发现里面的签名文件是用的系统签名文件 然后就自己从新打包签名后 再次安装后 就出现了上述这个报错 报错如下 Installation failed with message Fai
  • 无线发射功率

    无线电发射功率 无线电发射机输出的射频信号 通过馈线 电缆 输送到天线 由天线以电磁波形式辐射出去 电磁波到达接收地点后 由天线接收下来 仅仅接收很小很小一部分功率 并通过馈线送到无线电接收机 因此在无线网络的工程中 计算发射装置的发射功率
  • msm8937 usb power off charging log

    Format Log Type Time microsec Message Optional Info Log Type B Since Boot Power On Reset D Delta S Statistic S QC IMAGE
  • spark中repartition和coalesce的区别

    总的来讲 两者 对是否允许shuffle 不同 coalesce numPartitions shuffle false repartition numPartitions repartition 其实是 coalesce 中参数shuff
  • 调用拷贝构造函数的三种情况

    1 当用类的一个对象去初始化类的另一个对象时 如下代码中的 Rectangle p2 p1 用对象p1去初始化对象p2 拷贝构造函数被调用 代入法 还有一种是赋值法 Rectangle p2 p1 2 当函数的形参是类的对象 调用函数进行形