浅析复制构造函数

本文详细介绍了复制构造函数的概念、声明及实现方式,并通过具体实例解释了复制构造函数在三种常见情况下的调用时机。

复制构造函数

复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。如果程序员没有没有定义类的复制构造函数,系统会在必要时自动生成一个隐含的复制构造函数。这个隐含的复制构造函数的功能是,把初始值得对象的每个数据成员的值都复制到新建立的对象中。

声明和实现复制构造函数的方法是:

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值