5. 赋值操作符

5. 赋值操作符
并不是程序清单12.3的所有问题都可以归咎于默认的复制构造函数,还需要看一看默认的赋值操作符。
ANSI C 允许结构赋值,而C++允许类对象赋值,这是通过自动为类重载赋值操作符实现的。这种操作符
的原型如下:
Class name & Class_name :: operator= (const Class_name &) ;
它接受并返回一个指向类对象的引用。例如,StringBad类的赋值操作符的原型如下:
StringBad & StringBad :: operator= (const StringBad &) ;
(1)何时使用赋值操作符
将已有的对象赋给另一个对象时,将使用重载的赋值操作符:

388

C++Primer Plus(第五版)中文版

StringBad headlinel ("Celery Stalks at Midnight") ;

StringBad knot:
knot = headlinel; // assignment operator invoked
初始化对象时,并不一定会使用赋值操作符:
StringBad metoo = knot: // use copy constructor, possibly assignment, too
这里,metoo是一个新创建的对象,被初始化为knot的值,因此使用复制构造函数。不过,正如前面
指出的,实现时也可能分两步来处理这条语句:使用复制构造函数创建一个临时对象,然后通过赋值将临
时对象的值复制到新对象中。这就是说,初始化总是会调用复制构造函数,而使用=操作符时也可能调用
赋值操作符。
(2)赋值操作符的功能
与复制构造函数相似,赋值操作符的隐式实现也对成员进行逐个复制。如果成员本身就是类对象,则
程序将使用为这个类定义的赋值操作符来复制该成员,但静态数据成员不受影响。

你可能感兴趣的:(c++)