c++-如何实现这个C++点类呢?

问题描述

如何实现这个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也到这里当热心人了。楼主赶紧结了吧,代码都出来了

时间: 2024-09-19 09:24:44

c++-如何实现这个C++点类呢?的相关文章

那些意境情怀俱佳的咖啡类网页设计

  音乐可以穿越时光,而美食可以跨越国界,它们和好设计一样,都无需语言来赘述.在过去的几年中,那些设计优秀的餐馆.酒吧类网站开始抓住更多设计师的眼睛和吃货的胃,成了"唯有爱与美食不可辜负"的真实注脚. 新鲜精致的美食与优雅的环境无缝融合,搭配的字体和色彩让你的饥饿感止不住地翻涌起来,你的胃口和情绪会被这些精心设计的网站完全调动起来.优设曾经发过设计优异的美食和美酒类的网站,今天我们来看看这类网站的另外一个重要分支:咖啡类网页设计. 在美国,平均每个人每年会喝500~700杯咖啡,在中国

Delphi中TApplication类的用法

在Delphi中TApplication是一个有着十分重要作用的类.TApplication类是用于描述Delphi编制的应用程序的一个类.通过对这个类的灵活应用可以编制许多有特点的程序.. 1) 检测当前Windows程序是否被激活: TApplication类有一个属性--Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点.检 测的代码如下: If Application.Active=False then ShowMessage('当前窗口没有被激活');

PHP 验证登陆类分享

 本文给大家介绍的是用php实现的用户登录与验证的一段代码,没有把登录和数据库查询分开,有需要的朋友,可以参考学习下     简单的登录类,没有把登录和数据库查询分开   代码如下: /* * 例子 * * $Auth=new Auth(); * $Auth->login("123@123.com","123"); * $Auth->logout(); * echo $r->init(); * **/   验证登陆类   代码如下: <?ph

php中关于抽象(abstract)类和抽象方法的问题分析

 这篇文章主要介绍了php中关于抽象(abstract)类和抽象方法的问题分析,有需要的朋友可以参考一下 在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点.   什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象

php中关于抽象(abstract)类和抽象方法

  在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点. 什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰. 1.抽象关键字 :abstract 抽象就是

[Java] 方法锁、对象锁和类锁的意义和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 首先的明白Java中锁的机制 synchronized  在修饰代码块的时候需要一个reference对象作为锁的对象.  在修饰方法的时候默认是当前对象作为锁的对象.  在修饰类时候默认是当前类的Class对象作为锁的对象.   线程同步的方法:sychronized.lock.reentrantLock分析 方法锁(synchronized修饰方法时) 通过在方法声明中加入 synchronized关键字来声明 synch

一个类如何实现两个接口中同名同参数不同返回值的函数

假设有如下两个接口: public interface IA{    string GetA(string a);}public interface IB{    int GetA(string a);} 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该

obj-c中如何定义类的私有实例方法

obj-c原生没有提供此项机制,不像java有private/protected/public方法的概念.obj-c中的@private以及类似的@protected和@public是用于修饰类的实例变量的而不能修饰方法. 正如obj-c没有类变量可以通过定义static静态变量来解决一样,obj-c中类的私有实例方法也是可以通过分类来模拟的.我们可以将分类定义从类的头文件中转移到类的实现文件中来实现: foo.h #import <Foundation/Foundation.h> @inte

ASP中一个字符串处理类(VBScript)

vbscript|字符串 这个类是用于处理字符串的,是老外写的,我把里面的功能和参数加了说明 使用方法: =============== test.asp================ <!--#include file="StringOperations.asp"--> <%dim strset str = New StringOperations test = str.toCharArray("check this out") respons

用java写的一个文件操作类包

前几天仔细看了看java的I/O操作,呵呵.就写了一个操作文件的类包,功能有创建文件或目录,删除文件或目录,复制文件或目录,移动文件或目录,设置文件或目录属性,查看文件或目录大小.呵呵,功能比较简单,源代码为: 创建: Java代码 package fileOperation; import java.io.File; import java.io.FileOutputStream; /** * @author wakin * */ public class Create { /**根据字符串生