C++学习之<拷贝初始化构造函数>

#include

/*
拷贝初始化构造函数试验代码

拷贝初始化构造函数的功能就是用一个自己已知的对象来初始化一个对象。在下述三种情况下需要用拷贝初始化构造函数来用一个对象初始化
另一个对象。
 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="<


}

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次析构函数.

*/

你可能感兴趣的:(C++学习)