复制构造函数与普通构造函数的区别

本文详细介绍了类体外复制构造函数的定义格式及使用场景,解释了它与赋值构造函数的区别,包括参数形式的不同及被调用的具体情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类体外复制构造函数的定义格式:

<类名>::<类名>(const <类名> &<对象名>)

{

             //把已知的对象的每个数据的值都复制到新创建的对象中而不做其他处理

}

1.形式上的不同:两者虽然函数名与类名相同,也不指定函数类型。但复制构造函数只有一个参数,并且是对同类对象的引用-------复制构造函数无法重载。

eg:  Time time1(15, 10, 5);

       Time time2(time1);          //实参是对象名

2.两者被调用的情况不同: 

对于赋值构造函数,只会在以下三种情况发生时被调用:

     1.建立一个新对象,并用另一个同类的对象初始化

     2.当函数的参数为类对象在调用时需要将实参对象完整的传递给形参
         eg:    void fun (Time b)  //形参为类对象
                   {······}
                  int main()
                  {
                       Time time1(10, 12,  13);
                       fun(time1);
                           return 0;
                   }
     3.当函数的返回值是类对象:
          eg:   Time f()
                  {
                        Time time1(10, 15, 20);
                        return time1;                     //time1 为f内部声明的对象,在f调用结束前将time1放入一个临时创建的Time类对象中
                                                                 //并将这个临时对象复制给main中的time2,time1对象在f调用结束后就释放了
                  }
                 int main()
                 {
                        Time time2;
                        time2 = f();                    
                        return 0;
                 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值