复制构造函数细解

定义:复制构造函数用于将一个对象复制到一个新创建的对象中, 也就是说他用于初始化过程,而不是常规的赋值过程(常使用赋值操作符)


原型:

Class_name (const Class_name & );

    *传入函数的是指向类对象的引用常量


功能:

逐个复制非静态成员复制的是成员的值,指针的话就直接复制指针的值(新旧对象共享同一个指针指向的值,这常常会引起问题,使用深度复制即可,在复制构造函数中使用NEW,再将指针指向的值赋给新指针)


使用情况:


最经常用于新建一个对象并将它初始化为类现有的对象时

EX:

1,class_name A(B);

2,class_name A = B;

以上两种根据具体实现的不同可能有两种情况,一种是使用复制构造函数直接创建A,另一种是用复制构造函数创建一个临时对象,然后将临时对象的内容赋给A。//在笔者电脑上并未调用复制操作符

3, class_name A = class_name(B);

4, class_name *A = new class_name (B);//使用复制构造函数初始化一个匿名对象,然后将它的地址赋给A


函数进行值传递的时候

void FUN(class_name A);


返回函数值的时候

不一定会调用拷贝构造函数,这要看编译器的工作原理,VC6.0调用复制构造函数产生临时变量,mingw则不会



下面看一个笔试常考的题目

  1. #include <iostream>  
  2. using namespace std;  
  3. class base  
  4. {  
  5. private:  
  6.     int a;  
  7. public:  
  8.     base(){cout << "Base constructed function" << endl; }  
  9.     base(const base & b) {cout << "Base copy constructor function" << endl;}  
  10.     ~base(){cout << "Base destruct function" << endl;}  
  11. };  
  12.   
  13. class contain  
  14. {  
  15. private:  
  16.     base b_;  
  17. public:  
  18.     contain(){cout << "contain constructed function1" << endl;}  
  19.     contain(base &b):b_(b){cout << "contain constructed function1" << endl;};  
  20.     ~contain(){cout << "contain destruct funtion" << endl;}  
  21. };  
  22.   
  23.   
  24. void main ()  
  25. {  
  26.     base b;  
  27.     contain a(b);  
  28. }  

上述情况也是调用复制构造函数,所以输出应该: Base constructed function
Base copy constructor function
contain constructed function1
contain destruct funtion
Base destruct function
Base destruct function
Press any key to continue

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值