拷贝构造函数被调用的时机

转载 2015年07月06日 21:32:44


拷贝构造函数被调用的时机:

1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。

2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。

3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数。


下面给出一个例子:

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class Point  
  5. {  
  6. public:  
  7.     Point(int xx=0,int yy=0)  
  8.     {  
  9.         X=xx;   
  10.         Y=yy;  
  11.     }  
  12.     Point(Point& p);  
  13.     int GetX() {return X;}  
  14.     int GetY() {return Y;}  
  15. private:  
  16.     int X,Y;  
  17.     static int count;  
  18. };  
  19.   
  20. Point::Point(Point &p)  
  21. {  
  22.     X = p.X;  
  23.     Y = p.Y;  
  24.     count++;  
  25.     cout << "拷贝构造函数被调用, " << "count:"<< count << endl;  
  26. }  
  27.   
  28. void fun1(Point p)  
  29. {   
  30.     cout<<p.GetX()<<endl;  
  31. }   
  32.   
  33. Point fun2()  
  34. {  
  35.     Point A(3,4);  
  36.     //调用拷贝构造函数  
  37.     return A;  
  38. }  
  39.   
  40.   
  41. int Point::count = 0;  
  42.   
  43. void main(void)  
  44. {   
  45.     Point A(1,2);  
  46.     // 当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。  
  47.     Point B(A); //拷贝构造函数被调用  
  48.     cout<<B.GetX()<<endl;  
  49.   
  50.     // 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数  
  51.     fun1(A); //调用拷贝构造函数  
  52.   
  53.     // 当函数的返回值是类对象时,系统自动调用拷贝构造函数。  
  54.     B = fun2();  
  55.     cout<<B.GetX()<<endl;  
  56.       
  57.     // 调用2次拷贝构造函数,第一处是在fun2()中的return A,第二处是将fun2的返回值初始化引用ref时。  
  58.     Point & ref = fun2();  
  59.     cout<<ref.GetX()<<endl;  
  60.   
  61. }  

C++什么时候调用拷贝构造函数和什么时候调用构造函数

拷贝构造函数 都是在什么情况下调用??? /* ** 什么时候调用拷贝构造函数 ** */ #include using namespace std; //日...
  • love9099
  • love9099
  • 2015年02月03日 12:21
  • 1390

C++返回值为对象时复制构造函数不执行怎么破

先说点背景知识,调用复制构造函数的三种情况:  1.当用类一个对象去初始化另一个对象时。  2.如果函数形参是类对象。  3.如果函数返回值是类对象,函数执行完成返回调用时。  在辅导学生上机时,有同...
  • sxhelijian
  • sxhelijian
  • 2016年03月25日 11:42
  • 3458

调用拷贝构造函数的几种情况(附面试题)

1. 深拷贝和浅拷贝(拷贝构造函数的使用)   有时候需要自己定义拷贝构造函数,以避免浅拷贝问题。 在什么情况下需要用户自己定义拷贝构造函数: 一般情况下,当类中成员有指针变量、类中有动态内...
  • zzwdkxx
  • zzwdkxx
  • 2016年11月30日 16:24
  • 2359

拷贝构造函数被调用的时机

拷贝构造函数被调用的时机: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。 2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自...
  • whz_zb
  • whz_zb
  • 2012年05月01日 12:21
  • 3370

c++ 拷贝构造函数调用时机

class A { public :A(int a) { b=a; c++; cout
  • yigeyangchen
  • yigeyangchen
  • 2013年10月11日 17:15
  • 577

拷贝构造函数调用时机

拷贝构造函数在以下三种时机被调用1、 对象以值传递的方式传入函数参数#include using namespace std;class CExample { private: int a;...
  • will130
  • will130
  • 2015年10月11日 20:02
  • 583

拷贝构造函数被调用的时机

拷贝构造函数调用的几种情况: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。 2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用...
  • s_lisheng
  • s_lisheng
  • 2017年07月28日 17:41
  • 271

C++拷贝构造函数 调用时机 -- 深浅拷贝

http://blog.csdn.net/lwbeyond/article/details/6202256拷贝函数调用时机 对象以值传递方式传入函数参数 对象以值传递方式从函数返回 对象需要通过另外一...
  • qq_26437925
  • qq_26437925
  • 2016年08月05日 09:20
  • 325

smartptr应用及拷贝构造函数使用 源码

  • 2010年11月10日 16:05
  • 6KB
  • 下载

C++中拷贝构造函数的使用

  • 2012年07月29日 08:56
  • 275KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:拷贝构造函数被调用的时机
举报原因:
原因补充:

(最多只允许输入30个字)