不能重载的运算符包括(::域运算符;. *成员指针访问运算符;. 成员访问运算符;?: 条件运算符)
重载的两种方式:
一:作为某个类的成员函数
此时注意类的成员函数有一个隐含的参数,这个参数是this 指针,因此,如果将一个双目运算符定义为类的成员函数只需一个参数,单目运算符无参数;
二:作为独立的运算符函数(操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元)
与实际的参数个数相同即可
几点特殊之处:
1.’=';“()”;“【】”;“->”在重载时必须定义为类的成员函数
2.“《”;“》”只能定义为独立的函数。
运算符重载原则:
1.重载的运算符至少有一个与自定义的类有关;即运算符的参数不能全部是预定义的数据类型;一个运算符要多次重载,以方便用户灵活使用;
重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
2.重载时运算符的固有属性不变(优先级,结合性,操作数个数)
3.重载运算符不能有默认参数
4.不能自定义新的运算符
5.除赋值运算符外,其他可以重载的运算符都可以被派生类继承
6.保持运算符原有含义
7.不再具备短路求值特性
重载操作符并不保证操作数的求值顺序,尤其是,不会保证内置逻辑 AND、逻辑 OR和逗号操作符的操作数求值。在 && 和 ||的重载版本中,两个操作数都要进行求值,而且对操作数的求值顺序不做规定。因此,重载 &&、|| 或逗号操作符不是一种好的做法。
引用在运算符重载中的作用:
在作为函数的参数时,引用可以避免临时变量的生成,节省系统开销,为函数返回引用值有提供引用源;当引用作为函数的返回值时,函数调用成为左值;但是,用引用要小心。
自增(++)和自减(——)运算符重载特殊处理:
C++规定:后缀此类运算符定义是带一个参数,前缀不带参数(本位单目运算符,又有规定必须是类的成员函数重载,本应该无参数)