C++學習之<拷貝初始化建構函式>

來源:互聯網
上載者:User

#include<iostream.h>

/*
拷貝初始化建構函式實驗代碼

拷貝初始化建構函式的功能就是用一個自己已知的對象來初始化一個對象。在下述三種情況下需要用拷貝初始化建構函式來用一個對象初始化
另一個對象。
 1.明確表示由一個對象初始化一個對象時。如:TPoint P2(P1);
 2.當對象作為函數實參傳遞給函數形參時.如:P=f(N);
 3.當對象作為函數傳回值時.如:return R; 執行返回語句return R;時系統將用對象R來初始化一個匿名對象,這時需要調用拷貝初始化建構函式.
*/
class TPoint
{
 
 public:
  TPoint(int x,int y)
  {
   X=x;
   Y=y;
   //cout<<"Constructor Called/n";
  }
  TPoint(TPoint &p);
  ~TPoint()
  {
   cout<<"Destructor Called. /n";
  }
  int Xcoord()
  {
   return X;
  }
  int Ycoord()
  {
   return Y;
  }
 private:
   int X,Y;
   
};

TPoint::TPoint(TPoint &p)
{
 X = p.X;
 Y = p.Y;
 cout<<"Copy Initialization Constructor Called./n";
}

TPoint f(TPoint Q);

void main()
{

 TPoint M(20,35);
 TPoint P(0,0);
 TPoint N(M); //1.明確表示由一個對象初始化一個對象時,調用拷貝初始化建構函式
 
 P=f(N);   //2.當對象作為函數實參傳遞給函數形參時,調用拷貝初始化建構函式
 cout<<"P="<<P.Xcoord()<<","<<P.Ycoord()<<endl;

}

TPoint f(TPoint Q)
{
 cout<<"ok/n";
 int x,y;
 x=Q.Xcoord()+10;
 y=Q.Ycoord()+20;;
 TPoint R(x,y);
 return R;  //3.當對象作為函數傳回值時,系統將用對象R來初始化一個匿名對象,這時需要調用拷貝初始化建構函式
}

/*
程式運行結果:
Copy Initialization Constructor Called.
Copy Initialization Constructor Called.
ok
Copy Initialization Constructor Called.
Destructor Called.
Destructor Called.
Destructor Called.
P=30,55
Destructor Called.
Destructor Called.
Destructor Called.
Press any key to continue

結果說明:
1.拷貝初始化建構函式共使用了三次.具體說明前面已說明.
2.解構函式調用:在退出f()函數時,本函數中定義的對象被釋放,系統自動調用其解構函式.這裡共調用了二次.一次是用來釋放對象Q,另一次是
     是用來釋放對像R.
    在返回主函數main()後,用賦值運算子將其匿名對象的值賦給對象P,然後釋放匿名對象,這時又調用了一次解構函式.
    最後,退出整個程式時,又調用了三次解構函式,分別是用來釋放主函數中定義的對象M,P和Nr .
    所以總共調用6次解構函式.

*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.