重载加法运算符,实现对象的直接加法运算。例如,下面这个feetinches类:
class FeetInches{private: int feet; int inches; //对feet和inches的值进行调整 void simplify();public: FeetInches(int f=0, int i=0) { feet = f; inches = i; simplify(); } void setData(int f,int i) { feet = f; inches = i; simplify(); } int getFeet(){return feet;} int getInches(){return inches;} //重载加法运算符 FeetInches operator+(const FeetInches &right) { FeetInches temp; temp.feet = this->feet + right.feet; temp.inches = this->inches + right.inches; temp.simplify(); return temp; }};其中simplify函数实现对feet和inches的调整,具体实现如下:
void FeetInches::simplify(){ if(inches >= 12) { feet+=inches/12; inches = inches%12; }else if(inches < 0) { feet-=abs(inches)/12 + 1; inches = 12 - abs(inches)%12; }} 注意:在上述的重载函数中,函数首先定义了一个局部对象temp,用于存储当前对象和形参对象相加运算的结果,然后返回temp,并复制给等号左边的对象。
当执行两个feetinches对象的加法运算时,将自动调用上面类中的重载函数,例如下面两句的意思完全相同:
FeetInches length1(3,5),length2(1,2),length3; length3 = length1 + length2; length3 = length1.operator+(length2); //意义和上句一样 任何一个双目运算符V被重载之后,当执行如下形式的二元运算时:obj1 V obj2
都完全等价于:obj1.operator B (obj2)
也就是对象obj调用函数成员operator B,其中obj2作为函数实参。
主函数测试:
//重载加法双目运算符int main(){ FeetInches length1(3,5),length2(1,2),length3; length3 = length1 + length2; cout <<"the data of the length3 is:"<< endl; cout<<"feet: "<<length3.getFeet()<<endl; cout<<"inches: "<<length3.getInches()<<endl; return 0;}输出结果: