对象的赋值针对指对象中所有数据成员的值;
对象的赋值只对其中的数据成员赋值
对象赋值中,不涉及成员函数的话题,因为同一类的所有对象有各自
的成员数据,但是成员函数是共享的。
同类对象之间可以互相赋值,对象名1=对象名2.
实现的原理:赋值运算符的重载。
对象的复制是用已有的对象克隆出一个新对象:类名 对象2(对象1),比如:
Box box2(box1);
对于上面的语句来说,box2的初始化的参数是另外一个对象。
对象的复制的原理:编译系统提供的默认复制构造函数。该复制构造函数举例如下:
Box::Box(const Box &b)
{
height=b.height;
width=b.width;
length=b.length;
}
上面默认复制构造函数中的参数用引用类型的好处为:不必为了这个对象专门开辟存储空间。
参数之所以用const类型是因为没有必要在函数中改变b的值,有效保护b引用的实参不被修改。
等价的形式: 类名 对象2=对象1;这种也执行复制构造函数
例如:Box box2=box1;
赋值初始化 vs 复制初始化
c味的赋值初始化 c++味的复制初始化(调用默认复制构造函数)
int a=5 int a(5);
float w=a+3.2 float w(a+3.2)
string name="L. He" string name("L.He")
string s(name);
Time t1;
Time t2(8,30,20)
Time t3(t1);
何时要通过复制构造函数进行对象复制?
1.新建立一个对象:利用复制构造函数进行初始化
Box box1(box2);
2. 当函数的参数为类的对象:调用函数时,将实参对象完整地传递给形参,通过调用
复制构造函数来建立一个实参的拷贝
3. 函数的返回值是类的对象:在函数调用完毕,将函数中的对象复制一个临时对象并传递给该函数的调用处。