C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下。编译的环境是vs2013,我下面是进入单步调试时测试出来的结果。大家可以把下面的代码在自己的vs上面调试一下,结合着我的注释内容(我把解释部分直接放在了代码注释里面了),做更加深刻的理解。

#include<iostream>
using namespace std;class Date
{
private:int _year;int _month;int _day;
public:Date(int y,int m,int d);Date(const Date& d);void setDate(int y,int m,int d);void showDate();
};Date::Date(int y = 2017, int m = 3, int d = 8) :_year(y), _month(m), _day(d)
{cout << "Constcuting ..." << endl;
}Date::Date(const Date &d)
{_year = d._year;_month = d._month;_day = d._day;cout << "拷贝构造函数" << endl;
}void Date::setDate(int y, int m, int d)
{_year = y;_month = m;_day = d;
}inline void Date::showDate()
{cout << _year << "." << _month << "." << _day << endl;
}Date newSetdate(Date &d)
{Date tmp;                   //这里函数被调用,首先调用构造函数,并且自动赋初值,实例化了一个新的对象tmpreturn tmp;                 //这返回tmp的时候,没有直接把内容进行返回,而是返回tmp的一份拷贝,所以这里调用了拷贝构造函数
}int main()
{Date date1(2017,3,7);         //首先调用构造函数date1.showDate();            //这里打印的结果是2.17,3,7  date1 = newSetdate(date1);   //这里首先调用的我的一个普通函数,大家可以先去这个普通函数中看一下date1.showDate();return 0;
}

这里给大家说一下调用拷贝构造函数的几种情况,一般情况下建议重写拷贝构造函数,防止出现深浅拷贝的问题。

(1)    当用类的一个对象去初始化类的另一个对象的时候

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

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

函数返回类的对象与拷贝构造函数相关推荐

  1. C++类对象的拷贝构造函数(转载)

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

  2. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...

  3. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句阅读笔记 目录 6.31 6.32 6.33 6.34 6.35 6.36 6.38 6.31 返回引用无 ...

  4. pandas使用argmax函数返回给定series对象中最大值(max、maximum)的行索引实战

    pandas使用argmax函数返回给定series对象中最大值(max.maximum)的行索引实战 目录 pandas使用argmax函数返回给定series对象中最大值的行索引实战

  5. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

    php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 原文:php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 1.函数 php内置函数可以直接使用,如果没有安装php扩展即可 ...

  6. C++类与对象:程序片段编程题/汽车类的定义,拷贝构造函数,析构函数的定义

    定义一个汽车类Car,其成员数据包括汽车编号id.品牌brand.发动机动力power和载客人数numOfPersons, 实现一个打印自身信息的成员函数printCar(). 定义默认构造函数.带所 ...

  7. C++学习总结(函数、类与对象)

    前言:时间过的好快,转眼一学期就过去了,期末考试也快到了,所以就复习一遍同时也将自己学习的感悟总结下来.前面几章大多与C语言相似,就不总结了. 第三章--函数 参数传递 #include <io ...

  8. 简述对象和类的关系python_(一)Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法...

    一:类的定义 如果把对象比作一个"饼干",类就是制造这个饼干的"模具". 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,"类将行为和状 ...

  9. Py函数直接传入root是啥意思_阿里云python课程笔记(四):函数amp;类和对象

    接阿里云python课程笔记(三):数据结构 我们讨论一下python中的深拷贝和浅拷贝 dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]}# 引用对象dic ...

最新文章

  1. Spring思维导图(MVC篇)
  2. bad geometry: block count 65536 exceeds size of device (53248 blocks)
  3. Quartz.net官方开发指南 第二课:Jobs And Triggers
  4. linux常用的内核镜像格式
  5. 空except的慎用
  6. C#Word转Html的类
  7. linux如果时间等于22点,Linux下ntpdate时间同步
  8. SQL Server XML格式化
  9. 练习题︱基于今日头条开源数据(二)——两款Apriori算法实践
  10. 说明 RISC 和 CISC 指令系统的区别?
  11. 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?
  12. AutoCAD2012从入门到精通中文视频教程 第16课 渐变填充,椭圆弧命令(个人收藏)
  13. xp系统dns服务器有问题,xp系统dns错误的恢复方法
  14. 格林积分在多边形截面特性计算的应用
  15. 脚本(script)——通俗易懂去理解
  16. CC++:计算某年某月的1号是星期几
  17. 用户画像--用户标签
  18. 自由空气间隙,爬电距离计算~~最便宜的ESD防护方法
  19. 给浏览器升个级,5款必备浏览器插件推荐
  20. 利用WCF的P2P共享剪贴板上的数据

热门文章

  1. 在撤销“本地修改”之后再恢复
  2. java内存数据管理
  3. 细数技术指标-[转载]
  4. js循环动态绑定带参数函数遇到的问题及解决方案[转]
  5. 2014百度面试题目---“求比指定整数大且最小的不重复数”解答
  6. mysql操作数字名称的schema时字符的逃逸问题
  7. 不同浏览器的怪癖小结【转】
  8. html5标记汇总,HTML标记汇总(1)_HTML教程
  9. linux 脚本 字符串函数调用函数调用,shell自定义函数及参数调用解析
  10. 获取oracle数据库war报告,Oracle 数据库开发及SQL基础实战