C 对象的初始化

2008-02-23 05:25:42来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

拷贝初始化构造函数

  拷贝初始化构造函数是一种特别的成员函数,他的功能是用一个已知的对象来初始化一个被创建的同类的对象。拷贝初始化构造函数实际上也是构造函数,他是在初始化时被调用来将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。

  拷贝衩始化构造函数的特点如下:

  1、该函数名同类名,因为他也是一种构造函数,并且该函数也不被指定返回类型。

  2、该函数只有一个参数,并且是对某个对象的引用。

  3、每个类都必须有一个拷贝初始化构造函数,其格式如下:

  <类名>::<拷贝初始化构造函数名>(const<类名>&<引用名>)

其中,<拷贝初始化构造函数名>是和该类名相同的。const是个类型修饰符,被他修饰的对象是个不能被更新的常量。

  假如类中没有说明拷贝初始化构造函数,则编译系统自动生成一个具备上术形式的缺省拷贝初始化构造函数。作为该类的公有成员。

  下面举一例子说明拷贝初始化构造函数

  class TPoint
  {
    public:
    TPoint(int x, int y) {X=x; Y=y;}
     TPoint(TPoint & p);
    ~TPoint() {cout<<"析构函数被调用。\n";}
    int Xcoord() {return X;}
    int Ycoord() {return Y;}
    private:
    int X, Y;
  };

  TPoint::TPoint(TPoint & p)
  {
    X = p.X;
    Y = p.Y;
    cout<<"拷贝初始化构造 函数被调用。\n";
  }

  #include
  void main()
  {
  TPoint P1(5, 7);
  TPoint P2(P1);
  cout<<"P2="<
  }

  该程式的输出结果为:

  拷贝初始化构造函数被调用。
  P2=5,7
  析构函数被调用。
  析构函数被调用。

  关于拷贝初始化构造函数的其他用法,可从下例看出:

  #include
  #include "tpont.h" //类的定义放于该文档中
  TPoint f(TPoint Q);
  void main()
  {
  TPoint M(20, 35),P(0, 0);
  TPoint N(M);
  P = f(N);
  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;
  }

  请大家自行调试该程式,并分析其结果

  总结:拷贝初始化构造函数的功能就是用一个已知的对象来初始化另一个对象。在下述三种情况下,需要用拷贝初始化构造函数来用一个对象初始化另一个对象。

  1、明确表示由一个对象初始化另一个对象时,如:TPoint P2(P1);

  2、当对象作为函数实参传递给函数形参时,如:上例 P = f(N);

  3、当对象用为函数返回值时,如:上例 return R;



标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 对象和数组

下一篇: C 成员函数的特性

热门词条
热门标签