重载操作符基础
1重载操作符的形参数目(包括成员函数的隐式 this 指针)与操作符的操作数数目相同
2重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
3作为类成员的重载函数,其形参看起来比操作数数目少 1。作为成员函数的操作符有一个隐含的 this 形参,限定为第一个操作数。
4 一般将算术和关系操作符定义非成员函数,而将赋值操作符定义为成员。
5 操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元。
5.1 赋值(=)、下标([])、调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。
5.2 对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数。
赋值操作符
一般而言,赋值操作符与复合赋值操作符应返回操作符的引用。
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}