重载的原则:不能够改变运算符的性质,如操作数的个数、优先级、结合性、语法结构等
函数类型 | 特点 | 说明 |
友元函数形式 | 1.函数定义为类的友元形式; 2.左操作数可以不是类的对象; 3.左右操作数按照顺序作为函数的参数; |
1.作为类的友元,可以直接访问类的私有成员; 2.有些运算符只能通过友元重载,如<</>>等; |
成员函数形式 | 1.函数定义为成员函数形式; 2.左操作数一定是类的对象; 3.右操作数是函数的参数; |
1.左操作数通过this指针访问当前对象; 2.右操作数通过参数访问; |
全局函数形式 | 1.函数定义为全局函数形式; 2.左右操作数按顺序作为函数的参数; |
1.一般需要通过公有访问函数来访问对象的私有成员; |
以下面所示类为例
class Cint
{
private:
int x;
public:
//添加内容
}
友元函数形式:
friend Cint operator + (const Cint& lhs,const Cint& rhs)// Cint + Cint形式
friend Cint operator + (const int lhs,const Cint& rhs)// int + Cint形式
friend Cint operator + (const Cint& lhs,const int rhs)// Cint + int形式
成员函数形式:
Cint operator + (const Cint& rhs)// Cint + Cint形式
Cint operator + (const int rhs)// Cint + int形式
无int + Cint形式
全局函数形式://此时需要用公有函数访问私有成员,不能直接访问私有成员
Cint operator + (const Cint& lhs,const Cint& rhs)// Cint + Cint形式
Cint operator + (const int lhs,const Cint& rhs)// int + Cint形式
Cint operator + (const Cint& lhs,const int rhs)// Cint + int形式