为了程序看起来简洁,和方便,减少代码量,以及方便类类型操作像内置类型一样方便。于是,提出重载操作符。
14.1 重载操作符的定义
重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符号。
14.1.2
重载操作符必须具有一个类类型操作数
注意:
重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
14.1.3
类成员和非成员
重载一元操作符作为成员函数就没有显示形参,作为非成员函数就有一个形参,类实地,重载二元操作符定义为成员时有一个形参,定义为非成员函数时有2个形参。
14.1.4
操作符重载和友元关系
操作符定义为非成员函数时,通常需将他们设置为所操作类的友元。
14.1.5
相等和关系操作符
将要做顺序容器关联的key,写一些操作符方便算法去调用,类似Java里类实现比较接口,算法调用比较接口就能比较。
14.2输入输出操作符重置
必须以非成员函数的形式
14.3算术操作符和关系操作符
14.3.1相等操作符
14.3.2关系操作符
14.4 赋值操作符
类类型赋值操作符(=),如果没有定义它,那么编译器将会合成它
class string {
public:
string& operator=(const string &);// s1=s2;
string& operator=(const char *);//s1="str"
string& operator=(char);//s1='c';
}
赋值必须返回*this 的引用
14.5下标操作符
1.提供读写访问
2.原型下标操作符
类定义下标操作符,一般需要定义2个版本,一个为非const成员并返回引用,另一个为const成员并返回const引用。
14.6成员访问操作符
为了支持指针型类,允许重载解引用操作符(*)和箭头操作符(->)
箭头操作符必须定义为类成员函数,解引用操作符不要求定义为成员,但将它作为成员一般也是正确的。
重载解引用操作符
重载箭头操作符
14.8调用操作符和函数对象
14.8.1将函数对象用于标准库算法
14.8.3函数对象的函数适配器
标准库提供了一组函数适配器,用于特化和扩展二元函数对象。
函数适配器分2类:
1.绑定器 bind1st和bind2nd
2.求反器 not1 和 not2
14.9 转换和类类型
14.9.2 转换操作符
定义在成员函数内
operator type(); 不能带有形参
1.使用类类型转换
2.类类型转换和标砖转换
3.只能应用一个类类型转换
4.标准转换可放在类类型转换之前
14.9.3实参匹配和转换