C++中复制构造函数被调用的三种情况
C++中的构造函数
c++中的构造函数分为构造函数,和复制构造函数,相比于构造函数,复制构造函数使用更加方便,快捷。构造函数可以有多个,二复制构造函数只能有一个,因为复制构造函数的参数
只能是当前类的一个对象,参数表是固定的,无法重载,若用户没有定义自己的辅助构造函数,系统会自动生成一个复制构造函数,其作用是将参数的之赋予当前的对象.若用户自己定义了复制构造函数,系统则不会生成默认复制构造函数。用户自己定义的复制构造函数功能可以自己构造,不一定执行复制的功能。
复制构造函数同构造函数的功能大体相同·,却又有不同之处,下面介绍复制构造函数在3中情况下的调用
1.当用一个对象去初始化同类的另一个对象时,会引发复制构造函数的调用
以下两条语句都会导致复制构造函数的调用
Complex c1(c2);
Complex c1=c2;
这两条语句时等价的,其中第二句是初始化语句,不是赋值语句
下面这一条语句不会调用复制构造函数
Complex c1,c2;
c1=c2;
2.作为形参的对象,使用复制构造函数初始化的
以下语句可以证明
```
#include<iostream>
using namespace std;
class A{
public:
A(){};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
void Func(A a)//普通函数
{
}
int main()
{
A b;
Func(b);//此语句相当于是将b复制给Func(a)中的a,导致调用复制构造函数
retur 0;
}
程序运行截图

3.如果函数返回的是类A的对象,那么函数返回时,类A的复制构造函数会被调用
程序如下
```
#include<iostream>
using namespace std;
class A{
public:
int v;
A(int i){
v=i;
};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
A a(4);
A Func()//普通函数
{
return a;
}
int main()
{
cout<<Func().v<<endl;//此语句中的Func()是一个类A的对象,但是不是a,只是用a初始化。
return 0;
}
```

##
以上三种情况是比较常见的复制构造函数被调用的例子
欢迎讨论,斧正
C++中复制构造函数被调用的三种情况的更多相关文章
- 复制构造函数被调用的三种情况------新标准c++程序设计
1.当用一个对象去初始化同类的另一个对象时,会引发复制构造函数被调用.例如,下面的两条语句都会引发复制构造函数的调用,用以初始化c2. C c2 (c1); C c2=c1; 这两条语句是等价的.注意 ...
- C++中复制构造函数和赋值操作符
先看一个例子: 定义了一个类:
- C++中复制构造函数与重载赋值操作符总结
前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- Spring如何使用JdbcTemplate调用存储过程的三种情况
注:原文 <Spring如何使用JdbcTemplate调用存储过程的三种情况 > Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用Jdbc ...
- SpringBoot2.0.2 Application调用的三种方式
一.注解 @SpringBootApplication 点开查看源码是由多个注解合成的注解,其中主要的注解有: @SpringBootConfigurati ...
- js中的数据类型隐式转换的三种情况
js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...
- (转)在网页中JS函数自动执行常用三种方法
原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...
- 转 Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式: 方式一:加载classpath目录下的vm文件 Prope ...
随机推荐
- Codeforces_500_C
http://codeforces.com/problemset/problem/500/C 数组从后向前代表当前书从上向下,当前位置只要向前找,找到当前位置的书,再将之间的重量加起来就可以了,相同的 ...
- ARTS Week 4
标题: ARTS Week 4 分类: ARTS tags: ARTS ----------------------------------- Nov 18, 2019 ~ Nov 24, 2019 ...
- 基于MATLAB的单级倒立摆仿真
有关代码及word文档请关注公众号“浮光倾云”,后台回复A010.02即可获取 一.单级倒立摆概述 倒立摆是处于倒置不稳定状态,人为控制使其处于动态平衡的一种摆,是一类典型的快速.多变量.非线性.强耦 ...
- ELF文件之三——使用链接脚本-2个函数
main.c int main() { ; } int add() { ; } main.o的比较 与之二相比,section header offset由0x90变为0xA4,增加0x14,即add ...
- Rip 动态路由协议
路由信息协议(RIP) 是内部网关协议IGP中最先得到广泛使用的协议. Routing Information Protocol) RIP是一种分布式的基于距离矢量的路由 ...
- 【转】Android之四大组件、六大布局、五大存储
文章来自:http://blog.csdn.net/shenggaofei/article/details/52450668 一.四大组件: Android四大组件分别为activity.servic ...
- python新手如何编写一个猜数字小游戏
此文章只针对新手,希望大家勿喷,感谢!话不多说先上代码: import random if __name__ == '__main__': yourname = input("你好! 你的名 ...
- 【二】、UML基础知识——图图解乾坤
[二].UML基础知识 UML概述 UML是一个通用的可视化建模语言,不同于编程语言,它通过一些标准的图形符号和文字来对系统进行建模.用于对软件进行描述.可视化处理.构建软件系统的文档.是一套总结了以 ...
- Linux文件结构-底层文件访问&文件目录和维护
每个运行中的程序被称为进程(process),它有一些与之关联的文件描述符(一些小值整数).可以通过文件描述符访问打开的文件或设备. 一个程序运行时,一般会有三个文件描述符与之对应 0:标准输入 1: ...
- VMware使用与安装
VMware安装 下载完Vmware -> 双击打开安装包 -> 选择下一步(如下图界面) 选择接受协议,点击下一步 选择经典进行安装.这个是默认安装,会把默认插件安装到相对应的路径 选择 ...