复制构造函数的作用:使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。如果系统没有复制构造函数,系统会自动生成一个隐含的复制构造函数。
例:
#include <iostream>
using namespace std;
class Point{
public:
Point(int xx=0,int yy=0){
x=xx;
y=yy;
}
Point(Point &p);//复制构造函数
int getX()
{
return x;
}
int getY(){
return y;
}
private:
int x,y;
};
Point ::Point(Point &p)//复制构造函数的实现
{
x=p.x;
y=p.y;
cout<<"Calling the Copy construct "<<endl;
}
void fun1(Point p)//形参为Point类对象的函数
{
cout<<p.getX()<<endl;
}
Point fun2()//返回值为Point类型的函数
{
Point a(1,2);
return a;
}
//主函数
int main()
{
Point a(4,5);
point b=a;//用一个已存在的对象对另一对象赋值
cout<<b.geetX()<<endl;
fun1(b);//如果函数的形参是类的对象,调用函数时,进行形参和实参结合时
b=fun2();//如果函数的返回值是类的对象,函数执行完成返回调用者
cout<<b.getX()<<endl;
return 0;
}
默认复制构造函数的功能:将一个对象的非静态成员的值逐个复制给另一个对象,注意复制的是成员的值,这种复制方式也称为浅复制。因为静态成员属于整个类,而不属于某个对象,所以调用复制构造函数时静态成员不会受到影响。