读书人

关于运算符重载。解决方法

发布时间: 2013-01-02 13:08:44 作者: rapoo

关于运算符重载。。。。。。
题目:编写程序定义Point类,在类中定义整型的私有成员变量x,y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”运算符,定义成函数Point& operator -();Point operator - -(int);以实现对Point类重载“- -”运算符,实现对坐标值的改变。


我的程序:
#include<iostream>
using namespace std;

class Point
{
public:
Point(int X,int Y):x(X),y(Y){}
int getX() {return x;}
int getY() {return y;}
Point &operator ++()
{
x++;
y++;
return *this;
}

Point operator ++(int)
{
Point p=*this;
++(*this);
return p;
}


Point & operator --()
{
x--;
y--;
return *this;
}

Point operator --(int)
{
Point p=*this;
--(*this);
return p;
}


private:
int x,y;
};


int main()
{
Point point1(3,4);
cout<<"第一个点的坐标是:"<<point1.getX()<<","<<point1.getY()<<endl;
cout<<"第一个点移动后的坐标是:"<<(point1++).getX()<<","<<(point1++).getY()<<endl;
++point1;
cout<<"第二个点移动后的坐标是:"<<point1.getX()<<","<<point1.getY()<<endl;

return 0;
}

实际的运行结果是这样的:
关于运算符重载。解决方法

而正确的结果不该是这样么:
第一个点的坐标是:3,4
第一个点移动后的坐标是:3,4
第二个点移动后的坐标是:5,6
求解为什么。。。。。。。。。。。。关于运算符重载。解决方法
[解决办法]

引用:
引用:第一个点的坐标是:3,4 ,
第二个点移动后的坐标是:6,7 , 加了三次了,这个也是正确的

至于第二个,在同个语句中出现副作用,关于求值顺序请查看本版块置顶http://bbs.csdn.net/topics/370153775



可是,你看这个程序,二者不是差不多么,输出结果就是
the firs……

差不多就是不是完全一样,有时候差一点点结果就是完全不一样的,也是一个正确与不正确的差别
你把下面这句改成两句
cout<<"第一个点移动后的坐标是:"<<(point1++).getX()<<","; // 加分号成一句,下面再另起一句看看结果
cout <<(point1++).getY()<<endl;
++point1;

读书人网 >C++

热点推荐