问题描述
- 如何实现这个C++点类呢?
-
点类---运算符重载
题目描述如下:
设计点类CMyPoint , 可以实现以下代码:
CMyPoint p1,p2,p3;
cin>>p1>>p2; //输入: 4,2 1,2
p3 = p1 + p2;
cout<<p1<<?‘ + ’<<p2<<’ = ’<<p3<<endl?; //输出:(4,2)+(1,2)=(5,4)
p3 = p1 – p2?;
cout<<p1<<?‘ - ’<<p2<<’ = ’<<p3<<endl?; //输出:(4,2)-(1,2)=(3,0)
p3 = p1++;
cout<<p1<<”++ = ”<<p3<<endl; //输出:(4,2)++= (4,2)
cout<<”++”<<p1<<” = ”?;
++p1?;
cout<<p1<<endl; //输出:++(5,3) = (6,4)其中,点类的+运算的含义:
两个点的横坐标相加 得到 和的横坐标,
两个点的纵坐标相加 得到 和的纵坐标。
点了的-运算的含义:
被减数的横坐标 减去 减数的横坐标 得到 差的横坐标,
被减数的纵坐标 减去 减数的纵坐标 得到 差的纵坐标,
解决方案
class CMyPoint
{
friend istream& operator>>(istream& cin, CMyPoint& pt);
friend ostream& operator<<(ostream& cout, const CMyPoint& pt);
friend CMyPoint operator+(const CMyPoint& point1, const CMyPoint& point2);
friend CMyPoint operator-(const CMyPoint& point1, const CMyPoint& point2);
public:
CMyPoint() : m_x(0), m_y(0) {}
CMyPoint(int x, int y) : m_x(x), m_y(y){}
CMyPoint(const CMyPoint& point)
{
m_x = point.m_x;
m_y = point.m_y;
}
CMyPoint& operator=(const CMyPoint& point)
{
m_x = point.m_x;
m_y = point.m_y;
return *this;
}
CMyPoint& operator+=(const CMyPoint& point)
{
m_x += point.m_x;
m_y += point.m_y;
return *this;
}
CMyPoint& operator-=(const CMyPoint& point)
{
m_x -= point.m_x;
m_y -= point.m_y;
return *this;
}
private:
int m_x;
int m_y;
};
istream& operator>>(istream& cin, CMyPoint& pt)
{
cin>>pt.m_x;
cin>>pt.m_y;
return cin;
}
ostream& operator<<(ostream& cout, const CMyPoint& pt)
{
cout<<"("<<pt.m_x<<","<<pt.m_y<<")";
return cout;
}
CMyPoint operator+(const CMyPoint& point1, const CMyPoint& point2)
{
CMyPoint pt;
pt.m_x = point1.m_x + point2.m_x;
pt.m_y = point2.m_y + point2.m_y;
return pt;
}
CMyPoint operator-(const CMyPoint& point1, const CMyPoint& point2)
{
CMyPoint pt;
pt.m_x = point1.m_x - point2.m_y;
pt.m_y = point1.m_y - point2.m_y;
return pt;
}
int _tmain(int argc, _TCHAR* argv[])
{
CMyPoint pt1;
CMyPoint pt2;
CMyPoint pt3;
cin>>pt1>>pt2;
pt3 = pt1 + pt2;
cout<<pt3<<endl;
return 0;
}
输入: 2 2 3 3
输出:(5,6)
解决方案二:
http://blog.csdn.net/insistgogo/article/details/6626952
解决方案三:
新手当然得自己动手啦,不然就是为了交作业……
解决方案四:
CMyPoint operator+(const CMyPoint& point1, const CMyPoint& point2)
{
CMyPoint pt;
pt.m_x = point1.m_x + point2.m_x;
pt.m_y = point1.m_y + point2.m_y;
return pt;
}
有个地方写错了
解决方案五:
Eleven也到这里当热心人了。楼主赶紧结了吧,代码都出来了