C++学习笔记(chapter4)
一、基础知识
1.何时会用到复制构造函数?
2.为何要自定义复制构造函数?
类似于使用复印机,有时候需要放大或者缩小复印,有时候需要复制一部分内容遮挡舍弃一部分内容。
3.默认复制构造函数
4. 复制构造函数语法,使用本类对象作为参数
复制构造函数不允许返回值,函数体内不允许有return语句。
二、代码测试
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point()
{
x=10;
y=15;
}
Point(int a, int b)
{
x=a;
y=b;
}
Point(const Point &p)
{
x=p.x;
y=p.y;
cout<<"calling copy constructer"<<endl;
}
int getx(){return x;}
int gety(){return y;}
};
/*以下函数在类体外定义,在类体内需要使用对象调用*/
void fun1(Point p)
{
cout<<p.gety()<<endl;
}
Point fun2()
{
Point a;
return a;
}
int main()
{
Point a;
Point c(1,2);
/*情形一:此处直接调用赋值构造函数进行对象赋值*/
Point b(a);
cout<<b.getx()<<endl;
cout<<"the vallue of cx="<<c.getx()<<endl;
/*情形二:此处形实结合传递类对象,通过赋值构造函数实现*/
fun1(a);
/*情形三:返回类对象,局部变量数据通过构造临时无名对象得以保存*/
c=fun2();
cout<<"the value of cx="<<c.getx()<<endl;
return 0;
}
测试结果
VS2013中,如理论所述,调用3次赋值构造函数,但是在VSCODE中却只有两次调用,测试发现情形三并没有调用复制构造函数,
好奇怪?
—以上