• 对象的赋值:

1.对象的赋值只对其中的数据成员赋值,而不能对成员函数赋值。赋值的过程是将一个对象的数据成员在存储空间的状态复制给另一个对象的数据成员的存 储空间。box2=box1;(前边没有类名)

 2.类的数据成员中不可包括动态分配的数据,否则在赋值时可能出现严重的后果。

  • 对象的复制:

有时会需要用到多个完全相同的对象,所以需要复制。有时需要将对象在某一瞬间时的状态保留下来。这就是更需要复制。用一个已有的对象快速的复制出 多个完全相同的对象。Box box2(box1);

 

其一般形式为:类名  对象名2(对象1);在建立一个新对象时调用一个特殊的构造函数----复制构造函数

Box::Box(const Box& b)

                        {

                             height=b.height;

                             width=b.width;

                             length=b.length;

                         }

复制构造函数也是构造函数,但是它只有一个参数,这个参数是本类的对象(不能是其他类对象)。此复制构造函数的作用就是将实参对象的各个数据成员值一一赋值给新的对象中对应的数据成员。

C++还提供了另一种语句来复制对象:  Box box2=box1;   其基本形式如下:

        类名  对象名1=对象名2;

还可以进行多个对象的赋值:Box box2=box1,box3=box2;请与下面的定义语句作比较:

 int a=4,b=a;这种形式看起来很直观,但是用起来很方便,但是其作用就是调用复制构造函数。

  • 普通构造函数与复制构造函数的区别:

    1.在形式上,

         类名(形参列表);                           //普通构造函数的声明,如Box(int h,int w,int len);

        类名(类名 &对象名);                    //复制构造函数的声明,如Box(Box &b);

    2.在建立对象时,实参类型不同。系统会根据实参的类型决定调用普通构造函数或复制构造函数。

      Box  box1(12,15,16);     //实参为整数,调用普通的构造函数

      Box box2(box1);           //实参是对象名,调用复制构造函数

    3.在什么情况下被调用。

      1)普通构造函数在程序中建立对象时被调用。

      2) 复制构造函数在已有对象复制一个新对象时被调用:

            a.程序中需要建立一个对象,并用另一个同类的对象对其初始化

           b.当函数的参数为类的对象时,在调用函数时需要将实参对象完整的传递给形参,也就是需要建立一个实参的拷贝,这就是按实参复制一个形参,系统是通过调用复制构造函数来实现的,这样能保证形参具有和实参完全相同的值。