请高手指点下加法运算符重载问题,谢谢!
#include<iostream.h>
class point
{
int x,y;
public:
point(){x=y=0;}
point(int i,int j){x=i;y=j;}
point(point &p){x=p.x;y=p.y;} //此语句可省略,想想为什么
~point(){}
void offset(int i,int j){x+=i; y+=j;}
void offset(point);
bool operator==(point);
void operator+=(point);
point operator+(point);
int getx(){return x;}
int gety(){return y;}
point& operator++(); //声明前缀单目运算符重载函数
point operator++(int); //声明后缀单目运算符重载函数
void print(){cout<<"The point is ("<<x<<","<<y<<")\n";}
};
void point::offset(point p)
{
x+=p.getx(); y+=p.gety();
}
bool point::operator ==(point p)
{
if (x==p.getx()&&y==p.gety())
return true;
else
return false;
}
void point::operator+=(point p)
{
x+=p.getx();y+=p.gety();
}
point point::operator +(point p)
{
this->x+=p.x; this->y+=p.y;
return *this;
}
point& point::operator++()
{
x++; y++;
return *this;
}
point point::operator++(int)
{
point temp=*this;
++ this->x; ++ this->y; //++ *this;
return temp;
}
void main()
{
point obj,obj1(3,4),obj2(5,6),obj3(obj2),obj4;
obj.print(); obj1.print(); obj2.print(); obj3.print();
obj++; obj.print();
++obj; obj.print();
cout<<"\n";
obj1.offset(10,10);obj1.print();
obj1.offset(obj2);obj1.print();
if(obj2==obj1)
cout<<"The obj2 is equal to obj1 !"<<endl;
else
cout<<"The obj2 isn't equal to obj1 !"<<endl;
obj1+=obj2;obj1.print();
obj+obj1;obj.print();obj1.print();
cout<<endl;
obj4=obj+obj1+obj2+obj3; obj4.print();obj.print();
}
这段程序的运行结果是
The point is (0,0)
The point is (3,4)
The point is (5,6)
The point is (5,6)
The point is (1,1)
The point is (2,2)
The point is (13,14)
The point is (18,20)
The obj2 isn't equal to obj1 !
The point is (23,26)
The point is (25,28)
The point is (23,26)
The point is (58,66)
The point is (48,54)
Press any key to continue
想问一下问什么
obj的值与obj4的值不相等呢,在加法运算符重载中this指针不是应该就是obj吗,obj与obj1相加返回obj然后在和obj2相加一次类推最后应该obj与obj4相等呀?但是事实上不是,每次连加时总是将第一次最前两个对象相加返回给第一个对象以后相加就不行了,为什么,哪位高手给指点指点,小弟不胜感激!