C++学习记录-面向对象-拷贝构造函数的调用时机
C++学习记录-面向对象-拷贝构造函数的调用时机
拷贝构造函数的调用时机
- 用一个对象来初始化另一个对象
- 将一个对象以值传递的方式作为参数传入函数中
- 以对象作为函数的返回值的时候
示例:
1.用一个对象来初始化另一个对象
1 | class chara { |
1 | chara p1; |
运行结果:
chara默认构造函数的调用
chara拷贝构造函数的调用
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 5848)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
2.将一个对象以值传递的方式作为参数传入函数中
1 | void test(chara p) {} |
1 | chara p1; |
运行结果:
chara默认构造函数的调用
chara拷贝构造函数的调用
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 26328)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
3.以对象作为函数的返回值的时候
1 | chara test2(chara p) { return p; } |
1 | chara p1; |
运行结果:
chara默认构造函数的调用
chara拷贝构造函数的调用
chara拷贝构造函数的调用
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 7516)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
注意:此处在向test2传参时p1已经拷贝,返回时就不再拷贝,最后一行是创建p2时调用的拷贝构造函数
如果将代码修改如下:
1 | chara test(string x) |
1 | chara p2 = test("神里绫华"); |
运行结果:
chara默认构造函数的调用
chara拷贝构造函数的调用
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 23496)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .





