将运算符重载函数作为类的非静态成员,其优点为函数可以使用本类对象的私有数据成员。根据运算符的操作数,有以下几种情况:
备注:为了方便起见,后面所有“成员函数”均表示“非静态成员函数”。
(1)双目运算符
对于下述形式的表达式:
ob1
应该将运算符重载函数作为“ob1所属类的成员函数”,并将“ob2类的引用作为重载函数的形式参数”。此时,上述表达式等价于“ob1.重载函数(ob2)”。例子如下:
class
(2)前置单目运算符
对于所有的前置单目运算符来说,其表达式如下:
单目运算符
此时,重载 运算符的函数不需要任何参数,因为该重载函数是ob的非静态成员函数。上述表达式等价于“ob.重载函数()”。 例子如下:
class
(3)后置单目运算符
对于++和--这两个单目运算符来说,由于其即可前置又可后置,所以要进行区分。其表达式如下:
ob 单目运算符;
当自加和自减后置时,需要一个无名的int类型作为重载函数形参。这个参数并不参与运算,只是用于和前置的单目运算符进行区分。例子如下:
class Duck {
public:
Duck() {};
// 以成员函数形式,重载后置单目运算符
Duck operator++(int) const {
printf("Duck ++! n");
// 返回为Duck类型
return Duck();
}
};