运算符重载定义:
对基本运算符号 +, -, *, /, =, (), [ ]等,增加定义能计算自定义数据(结构和类)的新的功能,以便与系统中这些符号的原功能构成重载。
注意:
在C++中,不能创建新的运算符。除少数几个预定义的运算符不能重载之外,基本运算符中大部分都可以重载。
C++中运算符重载的规则如下:
1) C++中绝大部分的运算符允许重载,除了:.、.*、 ::、Sizeof、 ?:
2) 只能对已有的C++运算符进行重载,不允许用户自己定义新的运算符;
3)使用方法与运算符作基本数据运算时的调用方法一致
4)不能改变运算符的操作对象的个数、优先级别、结合性;
5) 起码有一个操作数是自定义数据类型 ;
6)运算符重载可以是普通函数,也可以是类的成员函数,还可以是类的友元函数;
7)一般而言,用于类对象的运算符必须重载,但赋值运算符“=”例外。
运算符重载函数的两种形式
重载为类成员函数。(称为成员运算符函数)
重载为成员函数后,第1个参数是调用函数的对象, 该对象可由this指针找到,因此可隐含不写,形参表中从第2个操作数开始罗列。
定义成员运算符重载函数的语法形式:
1)类内部,定义成员运算符重载函数的格式:
函数类型 operator 运算符(形参表)
{函数体}
2)类中声明,类外定义成员运算符重载函数的格式:
class X{
函数类型 operator 运算符(形参表);
};
函数类型 X::operator 运算符(形参表)
{函数体
};
重载为类的友员函数(称为友元运算符函数)
定义友元运算符重载函数的语法形式:
1)类内部,定义友元运算符重载函数的格式:
friend 函数类型 operator运算符(形参表)
{函数体}
2)类中声明,类外定义友员运算符重载函数的格式:
class X{
friend 函数类型 operator运算符(形参表);
};
函数类型 operator运算符(形参表)
{函数体
}
注:
① 友员函数不能带(对象)的this 指针,该运算符的全部运算数都要给出。
② 运算符“=”,“()”,“[ ]”,“->”等在C++中不能用友员函数重载。