运算符重载需遵循以下原则:

1、除了类所属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符、三目运算符"?:"之外,C++中所有的运算符都可以进行重载

2、重载运算符限制在C++已有的运算符范围内,不允许创建新的运算符

3、重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符的操作数的个数及语法结构

4、运算符重载不能改变运算符用于内置类型的对象的含义,只能用于自定义类型对象之间,或者自定义类型和内置类型的混合使用

5、用户自定义类一般都需要重载后使用,但两个除外(=和&)

6、运算符重载可以通过成员函数的形式,也可通过友元函数、也可通过非成员函数、非友元函数的普通函数


重载的两种形式:

1、重载为类的成员函数

函数值显示的说明了一个参数,该参数为运算符的右操作数、

前置单目运算符重载时,不需要显示说明参数

后置单目运算符重载时,函数要带有一个整型参数

2、重载为类的友元函数

当运算符重载为类的友元函数时,由于没有隐含的this指针,因此所有的操作数都需要显示的表现出来


两种重载的比较:

当运算符函数是一个成员函数时,最左边的第一个参数必须是这个类类型的一个对象,如果最左边的参数不是这个类类型的对象,或者是内置类型的对象,则必须使用友元函数来重载

若运算符所需的操作数希望有隐式类型的转换时,则只能用友元函数

运算符=、()、[]、->可作为类成员运算符,不能作为友元运算符

除赋值运算符外,重载运算符可由派生类继承下去


《完》