运算符重载的方式有两种:类成员函数和友元函数。
calss{
private:
int num;
public:
Step(int num){this->num=num;}
Step& operator++();
friend Step operator+(const Step &p1,const Step &p2);
};
Step& Step::operator++(){
num++;
return *this;
}
Step opeartor+(const Step &p1,const Step &p2){
return Step(p1.num++p2.num);
}
- 自增运算符++使用了类成员函数的方式重载运算符,函数operator++是Step类的成员函数,调用时会讲对象本身作为函数的第一个参数。加法运算符+使用了友元函数的方式重载运算符,函数operator+是Step类外部的函数,在Step类中将该函数声明为友元函数。
- 建议:对单目运算符进行重载时使用类成员函数的方式,对双目运算符进行重载时使用友元函数的方式,但是()和[]重载时必须使用类成员函数,<<和>>重载时必须使用友元函数。