拷貝構(gòu)造函數(shù)被調(diào)用的時機(jī):
1. 當(dāng)用類的一個對象去初始化該類的另一個對象(或引用)時系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷貝賦值。
2. 若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實(shí)參賦值給形參,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。
3. 當(dāng)函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。
下面給出一個例子:
- #include <iostream>
- using namespace std;
-
- class Point
- {
- public:
- Point(int xx=0,int yy=0)
- {
- X=xx;
- Y=yy;
- }
- Point(Point& p);
- int GetX() {return X;}
- int GetY() {return Y;}
- private:
- int X,Y;
- static int count;
- };
-
- Point::Point(Point &p)
- {
- X = p.X;
- Y = p.Y;
- count++;
- cout << "拷貝構(gòu)造函數(shù)被調(diào)用, " << "count:"<< count << endl;
- }
-
- void fun1(Point p)
- {
- cout<<p.GetX()<<endl;
- }
-
- Point fun2()
- {
- Point A(3,4);
- //調(diào)用拷貝構(gòu)造函數(shù)
- return A;
- }
-
-
- int Point::count = 0;
-
- void main(void)
- {
- Point A(1,2);
- // 當(dāng)用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)拷貝賦值。
- Point B(A); //拷貝構(gòu)造函數(shù)被調(diào)用
- cout<<B.GetX()<<endl;
-
- // 若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實(shí)參賦值給形參,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)
- fun1(A); //調(diào)用拷貝構(gòu)造函數(shù)
-
- // 當(dāng)函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。
- B = fun2();
- cout<<B.GetX()<<endl;
-
- // 調(diào)用2次拷貝構(gòu)造函數(shù),第一處是在fun2()中的return A,第二處是將fun2的返回值初始化引用ref時。
- Point & ref = fun2();
- cout<<ref.GetX()<<endl;
-
- }
|