运算符重载完成.doc

上传人:飞****2 文档编号:60118983 上传时间:2022-11-13 格式:DOC 页数:16 大小:73.50KB
返回 下载 相关 举报
运算符重载完成.doc_第1页
第1页 / 共16页
运算符重载完成.doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《运算符重载完成.doc》由会员分享,可在线阅读,更多相关《运算符重载完成.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 实验五 运算符重载的应用班级:B135A2学号: 姓名: 杨弘 成绩: 一 实验目的1、理解运算符重载的作用;2、掌握运算符重载的两种方法;3、掌握单目、双目运算符的重载;二 使用的设备和仪器计算机+Windows XP +Visual C+6.0三 实验内容及要求1、定义一个复数类Complex,重载运算符“-”,使之能用于复数与实数的减法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。例如:i-c,c-i均合法(其中,c为复数类的对象,i为实数)。减法规则:复数实部与实数相减,复数虚部不变。2、定义点类Point,重载运算符“”、“”、“”、“!=”、“+”、“-”、“”

2、、“”,实现两个点的相加、相减、相等、不等、自增、自减、输入和输出运算。3、定义一个矩阵类Matrix,均为M行N列,通过重载运算符“+”、“-”,“”,“+”,“-”,“=”,“!=”来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。4、定义时间类Time,时间的表示采用24小时制。重载运算符“”实现时间的输出和输入;重载运算符“+”和“-”实现时间推后和提前若干分钟;重载运算符“+”和“-”实现当前时间推后和提前1小时;重载“”、“”、“=”来判断两个时间之间大于、小于、等于以及不等于的关系。注意:输入时需对数据合法性进行判断。5、编写一个程序,处理一个复数与一个doub

3、le型数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。定义复数(Complex)类,在成员函数中包含重载类型转换运算符:Operator double() return real;6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num,name,sex。请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。四 实验步骤1.程序代码:/*1、定义一个复数类Complex,重载运算符-,

4、使之能用于复数与实数的减法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。例如:i-c,c-i均合法(其中,c为复数类的对象,i为实数)。减法规则:复数实部与实数相减,复数虚部不变。*/#include /#includeusing std:cin;using std:cout;using std:endl;/using namespace std;class Complex /定义复数类private:double real,imag;public:Complex()real=0;imag=0;Complex(double a,double b)real=a;imag=b;v

5、oid Display();void Input();friend Complex operator-(Complex &a,double b);friend Complex operator-(double b,Complex &a);Complex operator-(Complex &a,double b) /定义“-”重载函数return Complex(a.real-=b,a.imag);Complex operator-(double b,Complex &a)return Complex(a.real-=b,a.imag);void Complex:Input()cout*输入*

6、endl;coutrealimag;void Complex:Display()cout*显示*endl; coutreal+imagiendl;int main() /主函数Complex c(1,1),c1;double m;c.Display();coutm; c=c-m;c.Display();return 0;运行结果:2.程序代码:/*2、定义点类Point,重载运算符、!=、+、-、,实现两个点的相加、相减、相等、不等、自增、自减、输入和输出运算。*/#include #include/using std:cin; /用#include加上Using std:cin;using

7、/ std:cout;using std:endl;对重载流插入、流提取运算符错误/using std:cout;/using std:endl;/using namespace std;class Point /定义point类private:double x;double y;static int count;public:Point()x=0;y=0;void Input();void Display(); Point operator+(Point &b); Point operator-(Point &b);friend int operator=(Point &a,Point &b

8、);friend int operator!=(Point &a,Point &b);friend Point operator+(Point &a);friend Point operator+(Point &a,int);friend Point operator-(Point &a); friend Point operator-(Point &a,int);friend istream & operator(istream & input,Point & a); friend ostream & operator(ostream & output,Point & a);int Poin

9、t:count=0; /注意赋值时没有static, int static Point:count=0; wrong!void Point:Input()cout*输入*endl;coutxy;count+;void Point:Display()cout*显示*endl;cout第count个坐标为:(x,y)(istream & input,Point & a) /重载流插入运算符inputa.xa.y;return input;ostream & operator(ostream & output,Point & a) /重载流插入运算符output(a.x,a.y);return ou

10、tput;int main() /主函数Point a,b;a.Input();a.Display();b.Input();b.Display();a=a+b;coutOverload+-a=a+b:aendl;a=a-b;coutOverload-a=a-b:aendl;cout重新用输入输出:endl;couta;cout显示a:endl;coutaendl;coutb;cout显示b:endl;coutbendl;cout*Overload = and !=endl;if(a=b)couta=bendl;else if(a!=b)couta!=bendl;return 0;运行结果:程序

11、代码:/*3、定义一个矩阵类Matrix,均为M行N列,通过重载运算符+、-,,+,-,=,!=来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。*/#includeusing namespace std;const int M=3;const int N=3;class Matrixprivate:int XMN;public:friend Matrix operator+(Matrix aN,Matrix bN);friend Matrix operator-(Matrix &a,Matrix &b);friend istream & operator(istream &

12、 input,Matrix &c);friend ostream & operator(istream & output,Matrix &c);friend Matrix operator+(Matrix &c);friend Matrix operator-(Matrix &c);friend int operator=(Matrix &a,Matrix &b);friend int operator!=(Matrix &a,Matrix &b);Matrix operator+(Matrix aN,Matrix bN) int i,j;Matrix cMN;for(i=0;iM;i+)fo

13、r(j=0;jN;j+) cij=aij+bij;return cMN;Matrix operator-(Matrix *a,Matrix *b) int i,j;Matrix cMN;for(i=0;iM;i+)for(j=0;j(istream & input,Matrix *c)int i,j;for(i=0;iM;i+)for(j=0;jcij;ostream & operator(istream & output,Matrix *c)int i,j; for(i=0;iM;i+)for(j=0;jN;j+)outputcij ;Matrix operator+(Matrix *c)i

14、nt i,j;for(i=0;iM;i+)for(j=0;jN;j+)+cij;return cMN;Matrix operator-(Matrix *c)int i,j;for(i=0;iM;i+)for(j=0;jN;j+)-cij;return cMN;int operator=(Matrix *a,Matrix *b)int i,j;for(i=0;iM;i+)for(j=0;jN;j+)if(aij!=bij)return 0;return 1;int operator!=(Matrix *a,Matrix *b)int i,j;for(i=0;iM;i+)for(j=0;jN;j+

15、)if(aij!=bij)return 1;return 0;int main()Matrix aMN,bMN,cMN;couta;cinb;coutDisplay(a):a;coutDisplay:(b)b;coutOverload + and -:endl;cMN=aMN+MN;coutDisplay(a):c;cMN=aMN-MN;coutDisplay:(b)c;coutOverload = and !=:endl;if(aMN=bMN)coutaMN=bMNendl;else coutaMN!=bMNendl;if(aMN!=bMN)coutaMN!=bMNendl;else cou

16、taMN=bMNendl;return 0;4. 程序代码:/*4、定义时间类Time,时间的表示采用24小时制。重载运算符实现时间的输出和输入;重载运算符+和-实现时间推后和提前若干分钟;重载运算符+和-实现当前时间推后和提前1小时;重载、=来判断两个时间之间大于、小于、等于以及不等于的关系。注意:输入时需对数据合法性进行判断。*/#include/using namespace std;class Time /Define class Timeprivate:int hour,minute,second;public:Time operator-();Time operator+();Ti

17、me operator+(int n);Time operator-(int n);friend istream & operator(istream & Input,Time & t);friend ostream & operator(ostream & Output,Time & t);friend int operator(Time &a,Time &b);friend int operator=(Time &a,Time &b);istream & operator(istream & Input,Time & t) /Overload /Make sure hour,minute,

18、second right.Inputt.hourt.minutet.second;while(1) if(t.hour24|t.hour60|t.minute60|t.second0)coutWrong! Please enter again!t.hourt.minutet.second;if(t.hour0&t.minute0&t.second0)break;return Input; ostream & operator(ostream & Output,Time & t) /Overload Outputt.hour:t.minute:t.second;return Output;Tim

19、e Time:operator+(int n) /Overload + Time t;t.hour=hour; t.minute=minute+n;t.second=second;return t;Time Time:operator-(int n) /Overload - Time t; t.minute=minute-n;t.hour=hour;t.second=second;return t;Time Time:operator+() /Overload + Time t; t.minute=minute;t.second=second;+hour;t.hour=hour;return

20、t;Time Time:operator-() /Overload - Time t;t.minute=minute;t.second=second;-hour;t.hour=hour;return t;int operator(Time &a,Time &b) /Overload if(a.hourb.hour)return 1;else if(a.hour=b.hour&a.minuteb.minute)return 1;else if(a.hour=b.hour&a.minute=b.minute&a.second(Time &a,Time &b) /Overload if(a.hour

21、b.hour)return 1;else if(a.hour=b.hour&a.minuteb.minute)return 1;else if(a.hour=b.hour&a.minute=b.minute&a.secondb.second)return 1;else return 0;int operator=(Time &a,Time &b) /Overload = if(a.hour!=b.hour)return 0;else if(a.minute!=b.minute)return 0;elseif(a.second!=b.second)return 0;else return 1;

22、int main()Time t,t0;coutt;cout*Display*endl;coutTime: tendl;cout*Operator*endl;coutAdd 20 minutes: ;t=t+20;couttendl; coutMinus 10 minutes: ;t=t-10;couttendl;coutAdd 1 hour: ; +t;couttendl;coutMinus 1 hour: ;-t;couttendl;coutt0;cout*Display*endl;coutTime: t0endl;cout*Compare*endl;if(t=t0)coutt=t0t0)

23、coutt0endl;elsecouttt0endl;return 0;运行结果:程序代码:/*5、编写一个程序,处理一个复数与一个double型数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。定义复数(Complex)类,在成员函数中包含重载类型转换运算符:Operator double() return real;*/#include/using namespace std;class Complex /Define class Complexprivate:double real,imag;public:double Complex:opera

24、tor+(double a);friend ostream & operator(istream & input,Complex & a);Complex() /构造函数real=10;imag=10;Complex(double a) /定义转换构造函数real=a;imag=0;double Complex:operator+(double a) / 重载类型转换符“+”double b;b=a+real;return b;ostream & operator(ostream & output,Complex &a) /重载“ ”outputa.real+a.imagi(istream &

25、 input,Complex &a) /重载“ ”inputa.reala.imag;return input;int main() / 主函数Complex s;double a,d1;coutComplex: sendl;couta):;cina;d1=s+a;coutd1= d1endl;s=d1;coutAfter s=d1 : sendl;return 0;运行结果:程序代码:/*6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num,name,sex。请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任

26、教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。*/#include#include#includeusing namespace std;class Teacher;class Student /定义学生类private: string num,name;string sex;public:void Input();void Display();friend class Teacher;friend Teacher Teacher:operator=(Student & s);class Teacher /定义教师类private: string

27、number,na;string s;public:void Input();void Display();Teacher operator=(Student & s);void Student:Input()coutnumnamesex;void Student:Display()cout对学生信息进行输出:endl;coutsetw(10)学号setw(10)姓名setw(10)性别endl;coutsetw(10)numsetw(10)namesetw(10)sexendl;void Teacher:Input()coutnumbernas;void Teacher:Display()cout对教师信息进行输出:endl;coutsetw(10)工号setw(10)姓名setw(10)性别endl;coutsetw(10)numbersetw(10)nasetw(10)sendl;Teacher Teacher:operator=(Student &s) number=s.num;na=s.name;s=s.sex;int main()Student s;Teacher t;s.Input();s.Display();t=s;t.Display();return 0;五 实验总结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁