复制构造函数
复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。如果程序员没有没有定义类的复制构造函数,系统会在必要时自动生成一个隐含的复制构造函数。这个隐含的复制构造函数的功能是,把初始值得对象的每个数据成员的值都复制到新建立的对象中。
声明和实现复制构造函数的方法是:
Class 类名{
Public:
类名(形参表);
类名(类名 &对象名);
};
复制构造函数的实现:
类名::类名(类名 &对象名){
函数体
}
例:
class Point{
public:
Point(int xx=0,int yy=0){
x=xx;
y=yy;
}
Point(point &p);
int getY(){return y;}
int getX(){return x;}
private:
int x,y;
};
类中内联构造函数和复制构造函数,复制构造函数的实现如下:
Point::Point(Point &p){
x=p.x
y=p.y;
cout<<”复制构造函数”<<endl;
}
普通构造函数在对象创建时被调用,而复制构造函数在以下3种情况下都会被调用。
(1)当用类的一个对象去初始化该类的另一个对象时。
例:
int main(){
Point a(1,2);
Point b(a);
Point c=a;
cout<<b.getX()<<endl;
return 0;
}
(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。
例:
void f(Point p){
cout<<p.getX()<<endl;
}
int main(){
Point a(1,2);
f(a);
return 0;
}
(3)如果函数的返回值是类的对象,函数执行完成返回调用者时。
例:
Point g(){
Point a(1,2);
return a;
}
int main(){
Point b;
b = g();
return 0;
}