8.9.4 实现引用类型的赋值运算符
在少数情况下,需要实现引用类型的赋值运算符,因为我们通常会用句柄引用对象,而不需要复制构造函数。然而,如果我们使用CLR的标准模板库(Standard Template Library,简写STL,第10章将会介绍),在有些情况下会需要实现赋值运算符,编译器永远不会提供默认的赋值运算符。在引用类中重载赋值运算符的函数形式非常简单,参见下面的示例很容易理解。下面举例说明Length类的赋值运算符:
- Length% operator=(const Length% len)
- {
- if(this != %len)
- {
- feet = len.feet;
- inches = len.inches;
- }
- return *this;
- }
该函数形参是const,因为它不会改变,如果不将它声明为const,则会按值传递实参,并且会导致调用复制构造函数。返回类型也是一个引用,因为它总是返回this所指向的对象。if语句检查实参与当前对象是否相同,如果相同,函数仅返回*this,它将是当前对象。如果不同,就在返回当前对象之前将len的每个数据成员复制到当前对象中。