函数类型 operator 运算符名称(形参表)
{ 对运算符的重载处理 }
- 函数名是由 operator 和 运算符 组成的
- 运算符重载的规则
- 不允许用户自定义新的运算符
- 不允许重载的5个运算符:
符号 类型 . 成员访问运算符 * 成员指针访问运算符 :: 域运算符 sizeof 长度运算符 ?: 条件运算符 - 不能改变 操作数个数
- 不能改变 优先级 和 结合性
- 不能有默认参数
- 参数 至少有一个 是类对象(或者对象的引用)
- = 和 & 不必重载
- 运算符重载的两个方式:
- 作为成员函数
- 可以少写一个函数参数
- 一般为单目操作符
- =,[],(),->只能作为成员函数重载
- 友元函数
- 一般为 双目操作符 的重载(为了普适交换律),以及 流插入 “<<” 和 流提取 “>>” 的重载
- 双目运算符的参数列表必须有 两个参数
- 不能是普通函数
- 作为成员函数
- 单目运算符:++,–的重载
- 前增:Object operator ++ ();
- 后增:Object operator ++ ( int );
- 为了让编译器区别前置和后置,在后置的声明中加入一个 虚参数 ,以示区别
- 而且后增返回的应该为变化前的对象,此时应该调用复制构造函数:
1
2
3Object temp(*this);
//进行++
return temp;
- 流插入 “<<” 和 流提取 “>>” 的重载
-
必须作为 友元函数 !
-
传入两个参数:一个流参数,一个对象,均为 引用
- 如果要对 临时对象 (如返回对象),进行 “<<”,此时要用const修饰引用的对象(ostream &os,const Object &obj),因为临时对象为 右值且默认const属性, C++ 规定右值不能绑定到非 const 限定的左值引用。
-
返回的类型要为 流,以便于连续向输出/输出流 插入信息
-
"<<"的重载格式如下:
1
2
3
4ostream& operator<< (ostream &os,Object &obj){
os<<obj.members;
return os;
} -
">>"的重载格式如下:
1
2
3
4istream& operator>> (istream &is,Object &obj){
is>>obj.members;
return is;
}
-
- 类型转换函数
operator 类型名()
{实现转换的语句}
//operator double(); 将对象转换为double类型。至于怎么转换,自己定义- 不能指定类型,没有参数
- 必须为成员函数,因为转换的主体是本类的对象