拷贝构造函数的调用时机:

class  Person {
public:
//构造函数
Person() {
//无参构造函数
}
Person(int a) {
//有参构造函数
cout << "有参构造函数" << endl;
}
Person(const Person &p) {
//拷贝构造函数,前面必须加const,拷贝过来的不能再修改了,固定的,就是说你拷贝过来了张三,不能再修改成张四(p.name=""),只能是原版张三
//传过来的&p是对象,p就是指针
age = p.age;//age被赋值
cout << "拷贝构造函数" << endl;
}
~Person()
{
cout << "析构函数" << endl;
}
int age;
};

第一种:使用已经创建好的对象来初始化新的对象

void  test01() {
//拷贝构造函数的几种方式
//第一种方式:直接赋值拷贝对象
Person p1;
p1.age = ;//已经创建好了对象
Person p2 = p1;//相当于拷贝了p1给p2
fun(p2);

第二种方式:值传递的方式拷贝

//第二种方式:值传递的方式拷贝
void fun(Person &p1) {//相当于Person p=Person(p2),拷贝构造函数,建议使用引用,节省一份新的开销,不用新的内存空间
cout << "fun函数:" << p1.age << endl; }
void  test01() {
Person p1;
p1.age = ;//已经创建好了对象
Person p2 = p1;//相当于拷贝了p1给p2
fun(p2);//传递p2给fun函数

第三种方式:以值方式返回局部对象

//第三种:以值方式返回局部对象int xxx(){},Person  xxx(){},结构体或者是函数的话,都可以不去加()
Person fun1() {
Person p;
p.age = ;
return p;
}
    //第三种方式:
Person p3 = fun1();

release模式下会做优化,debug模式下没有做优化

release模式下结果:第三种方式的

c++入门篇七的更多相关文章

  1. 【SSRS】入门篇(七) -- 报表发布

    原文:[SSRS]入门篇(七) -- 报表发布 完成[SSRS]入门篇(六) -- 分组和总计后,第一份简单的报表就已完成了,下面把报表发布到报表服务器上. (实际情况下,报表展示给用户未必是用报表服 ...

  2. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  3. ElasticSearch入门 第七篇:分词

    这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. CoreCLR源码探索(七) JIT的工作原理(入门篇)

    很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framew ...

  5. 转载 CoreCLR源码探索(七) JIT的工作原理(入门篇)

    转载自:https://www.cnblogs.com/zkweb/p/7687737.html 很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C# ...

  6. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  7. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  8. Swift入门篇-字符串和字符

    今天主要是介绍一下字符串的用法 ,字符串的语法和object-c语法不太一样,但是思想是一样,就是写法不太一样.如果您对.net和java语法比较熟悉的话,那您几乎没有深压力.如果您对swift 基本 ...

  9. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)

    四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...

随机推荐

  1. css块居中

    1.已知宽高的块级元素居中: 2.未知宽高的块级元素居中:

  2. Jetson TX1 compile pytorch issues

    1. c++: internal compiler error: Killed (program cc1plus) reason: memory out, need swapfile 2. NCCL ...

  3. win10双系统安装卸载ubuntu

    安装 1. 官网下载需要安装的Ubuntu版本 2. 格式化U盘,用UltraISO软件将Ubuntu写入U盘 3. 设置电脑U盘启动,重启电脑安装,注意安装时关闭在线下载,否则会安装很久 4. 安装 ...

  4. 前端知识之Ajax

    Asynchronous JavaScript and XML 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.是在不重新加载整个页面的情况下,与服务器交换数据并异步更新部分网页 ...

  5. 第八周java学习总结

    学号 20175206 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章:泛型与集合框架 主要内容 泛型 链表 堆栈 散列映射 树集 树映射 重点和难点 重点:泛型和集合的使 ...

  6. Java虚拟机—垃圾收集器(整理版)

    1.概述 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很 ...

  7. Ajax简述

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX = 异步 JavaScript和X ...

  8. (Python3) 九九乘法表 代码

    for i in range(1,10): for j in range(1,10): print(i '*' j '=', i*j)

  9. String Byte 互转

    string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...

  10. mysql,mycat的demo

    一直都是使用公司架构师提供的mycat,今天得空自己尝试了以下: 1.首先安装jdk(官网建议1.7及以上版本),mysql(我安装的是5.7.19-0ubuntu0.16.04.1,设置账号密码为r ...