1、概述函数
C++预约义的运算符的操做对象只能是基本数据类型,可是实际上许多用户自定义类型(例如类),也须要相似的运算符操做,C++能够经过运算符重载来知足这种需求。运算符重载本质就是函数重载,也是C++多态的一种形式。运算符重载是经过建立运算符函数实现的,和其余函数相似,惟一的区别是函数名为关键字operator和运算符符号组成。this
2、运算符重载限制指针
(1)至少有一个操做数是自定义类型,防止为基本数据类型重载运算符对象
(2)不能违反运算符原来的句法规则,不能修改运算符优先级变量
(3)不能建立新的运算符数据类型
(4)有些运算符不能重载数据
(5)大多数运算符重载能够经过成员函数或者非成员函数实现,可是有些运算符只能经过成员函数重载,例如赋值运算符=、函数调用运算符()、下标运算符[]、经过指针访问类成员运算符->类型转换
3、友元函数co
在类声明中,友元函数在声明前添加friend关键字,在函数定义中不用再添加friend关键字,也不用添加类的限定符,由于友元函数为非成员函数,可是友元函数能够访问类成员变量错误
4、运算符重载的两种方式
一、运算符重载函数为类的成员函数
(1)函数定义
<返回值类型> operator <运算符符号>(<形参>)
{
}
(2)函数调用
<对象名>.operator <运算符>(<实参>)
或者<对象名><运算符><参数>
二、运算符重载函数为类的友元函数
(1)函数定义
friend <返回值类型> operator <运算符符号>(<参数类别>)
{
}
(2)函数调用
operator <运算符>(<参数1>,<参数2>)
或者operator <运算符>(<参数1>,<参数2>)
5、两种运算符重载形式比较
一、运算符重载函数为成员函数时,函数的参数要比原来的操做数少一个,由于成员函数用this指针隐式地访问了类的一个对象,它充当了运算符函数最左边的操做数
二、运算符重载函数对于成员函数和友元函数这两种形式只能选择一种,不然将产生二义性错误
三、当须要重载的运算符具备可交换性时,选择友元函数
四、当运算符左边的操做数是不一样类的对象时,例如cout<<MyClass,则必须采用友元函数来实现。
五、赋值运算符=、函数调用运算符()、下标运算符[]、经过指针访问类成员运算符->,这些运算符只能采用成员函数进行运算符重载
六、 若运算符所需的操做数(尤为是第一个操做数)但愿有隐式类型转换,则只能选用友元函数