c++ primer 学习笔记:复制控制之赋值操作符
2013-08-26 22:52
239 查看
赋值操作符
与类要控制初始化对象的方式一样,类也定义了该类型对象赋值时会发生什么:Sales_item trans, accum; trans = accum;与复制构造函数一样,如果类没有定义自己的赋值操作符,则编译器会合成一个。
重载操作符
重载操作符是一些函数,其名字为operator 后跟着所定义的操作符的符号。因此,通过定义名为 operator= 的函数,我们可以对赋值进行定义。像任何其他函数一样,操作符函数有一个返回值和一个形参表。形参表必须具有与该操作符数目相同的形参(如果操作符是一个类成员,则包括隐式this 形参)。赋值是二元运算,所以该操作符函数有两个形参:第一个形参对应着左操作数,第二个形参对应右操作数。大多数操作符可以定义为成员函数或非成员函数。当操作符为成员函数时,它的第一个操作数隐式绑定到this 指针。有些操作符(包括赋值操作符)必须是定义自己的类的成员。因为赋值必须是类的成员,所以this 绑定到指向左操作数的指针。因此,赋值操作符接受单个形参,且该形参是同一类类型的对象。右操作数一般作为 const 引用传递。
赋值操作符的返回类型应该与内置类型赋值运算返回的类型相同。内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用。例如,Sales_item 的赋值操作符可以声明为:
class Sales_item { public: // other members as before // equivalent to the synthesized assignment operator Sales_item& operator=(const Sales_item &); };
合成赋值操作符
合成赋值操作符与合成复制构造函数的操作类似。它会执行逐个成员赋值:右操作数对象的每个成员赋值给左操作数对象的对应成员。除数组之外,每个成员用所属类型的常规方式进行赋值。对于数组,给每个数组元素赋值。例如,Sales_item 的合成赋值操作符可能如下所示:
// equivalent to the synthesized assignment operator Sales_item& Sales_item::operator=(const Sales_item &rhs) { isbn = rhs.isbn; // calls string::operator= units_sold = rhs.units_sold; // uses built-in int assignment revenue = rhs.revenue; // uses built-in double assignment return *this; }合成赋值操作符根据成员类型使用适合的内置或类定义的赋值操作符,依次给每个成员赋值,该操作符返回*this,它是对左操作数对象的引用。
复制和赋值常一起使用
可以使用合成复制构造函数的类通常也可以使用合成赋值操作符。我们的Sales_item 类无须定义复制构造函数或赋值操作符,这些操作符的合成版本工作得很好。然而,类也可以定义自己的赋值操作符。一般而言,如果类需要复制构造函数,它也会需要赋值操作符。实际上,就将这两个操作符看作一个单元。如果需要其中一个,我们几乎也肯定需要另一个。
相关文章推荐
- C++ Primer 学习笔记_54_类与数据抽象 -复制构造函数、赋值操作符
- C++复制控制之赋值操作符(二)
- 一个实例介绍C++复制控制(有一个C++11新特性要注意)——复制构造函数、赋值操作符、析构函数
- C++复制控制:赋值操作符和析构函数
- 我的学习笔记——c++拷贝构造函数,重载赋值操作符
- 复制控制 - 2【C++ Primer 学习笔记 - 第十三章】
- C++学习笔记49——继承中的复制构造函数与赋值操作符
- C++学习笔记-类5-浅拷贝和深拷贝以及赋值操作符的重载
- C++学习笔记十三-复制控制
- Effective C++ 学习笔记:为含指针变量的类声明一个拷贝构造函数和一个赋值操作符
- 【C++ rimer 学习笔记】ch13 复制控制
- 2012/1/14 《C++ Primer Plus》第六章:分支语句和逻辑操作符 学习笔记
- 2012/1/14 《C++ Primer Plus》第六章:分支语句和逻辑操作符 学习笔记
- C++学习笔记——3.操作符与控制结构
- 智能指针:复制控制!《C++Primer 》第13章学习纪要
- 复制控制(学习<C++Primer>)
- C++ Primer 学习笔记_64_满载操作符与转换 -转换与类类型【下】
- C++ 第13章 复制控制---复制构造函数、赋值操作符、析构函数
- c++学习笔记之复制控制与stl算法
- C++入门学习笔记(二)--类的复制控制