实验报告模板实验4多态程序设计.docx
- 文档编号:2770967
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:26
- 大小:70.79KB
实验报告模板实验4多态程序设计.docx
《实验报告模板实验4多态程序设计.docx》由会员分享,可在线阅读,更多相关《实验报告模板实验4多态程序设计.docx(26页珍藏版)》请在冰点文库上搜索。
实验报告模板实验4多态程序设计
天津理工大学
计算机与通信工程学院
实验报告
至学年第学期
课程名称
实验(4)
实验名称
实验时间
学号姓名
专业
主讲教师
辅导教师
软件环境
硬件环境
实验目的
(1)掌握运算符重载的方法;
(2)掌握使用虚函数实现动态多态性;
实验内容(应包括实验题目、实验要求、实验任务等)
1.定义Point类,有坐标x,y两个成员变量,利用友元函数对Point类重载“++”运算符,实现对坐标值的改变。
具体要求如下:
(1)编写程序定义Point类,在类中定义整型的私有成员变量x,y;
(2)在类中定义两个友元函数,分别重载前置++和后置++;
(3)编写主函数测试。
注意函数有无返回值的区别,以及返回值是否带有&应用符号。
2.定义Point类,有坐标x,y两个成员变量,利用运算符重载对Point类重载“++”运算符,实现对坐标值的改变。
具体要求如下:
(1)编写程序定义Point类,在类中定义整型的私有成员变量x,y;
(2)定义成员函数Point&operator++();Pointoperator++(int);以实现对Point类重载“++”运算符,分别重载前置++和后置++;
(3)编写主函数测试。
3.定义一个分数类,通过重载运算符实现分数的四则运算、求负运算和赋值运算。
其中,要求加法“+”和减法“-”用友元函数实现重载,其他运算符用成员函数实现重载。
4.定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
具体要求如下:
(1)编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数;
(2)由车(vehicle)基类派生出自行车(bicycle)类、汽车类(motorcar),从bicycle类和motorcar类派生出摩托车类(motorcycle),它们都有Run、Stop等成员函数。
(3)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
(4)分别用vehicle类型的指针来调用几个对象的成员函数,看看能否成功(提示:
把Run、Stop定义为虚函
数)。
5.编写程序,定义抽象基类Container,由此派生出2个派生类球体类Sphere,圆柱体类Cylinder,分别用虚函数分别计算表面积和体积。
(1)球体的表面积为:
4πr2,球体的体积4πr3/3;圆柱表面积为:
2πR(h+R)圆柱体的体积πR2h。
(2)定义相应的对象,编写主函数测试。
6.设计一个时钟类TIME,内含数据成员hour,minute,second表示时间,成员函数set()设置时间数据,show()显示时间数据。
重载运算符++和--(具有返回值),每执行一次++,second自增1,执行一次--,second自减1。
second和minute的值在0~59区间循环(满59后再自增则归0,minute加1;second为0时再自减则为59,minute减1)。
hour的值在0~23区间循环。
实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)
1.记录程序运行结果
2.记录程序运行结果
3.记录程序运行结果
4.记录程序运行结果
5.记录程序运行结果
6.记录程序运行结果
附录(可包括源程序清单或其它说明)
1.
#include
usingnamespacestd;
classpoint
{
private:
intx,y;
public:
point(int,int);
friendvoidoperator++(point&);
friendvoidoperator++(point&,int);
voiddisplay();
};
point:
:
point(inta=0,intb=0):
x(a),y(b){}
voidpoint:
:
display()
{
cout<<"x="< } voidoperator++(point&A) { ++A.x; ++A.y; } voidoperator++(point&A,int) { ++A.x; ++A.y; } intmain() { pointA(1,2); ++A; cout<<"++A之后: "; A.display(); A++; cout<<"A++之后: "; A.display(); return0; } 2. #include usingnamespacestd; classpoint{ private: intx,y; public: point(int,int); point&operator++(); pointoperator++(int); voiddisplay(); }; point: : point(inta=0,intb=0): x(a),y(b){} voidpoint: : display() { cout<<"x="< } point&point: : operator++() { ++x; ++y; return*this; } pointpoint: : operator++(int) { ++x; ++y; return*this; } intmain() { pointA(1,2); ++A; cout<<"++A之后: "; A.display(); A++; cout<<"A++之后: "; A.display(); return0; } 3. #include usingnamespacestd; classfenshu { intfz,fm; public: fenshu(inti=0,intj=0); voidhuajian(); voidsetData() { cout<<"输入分子: "< cin>>fz; cout<<"输入分母: "< cin>>fm; } friendfenshuoperator+(fenshu&a,fenshu&b); friendfenshuoperator-(fenshu&a,fenshu&b); fenshuoperator*(fenshu&a); fenshuoperator/(fenshu&a); fenshu&operator=(fenshu&); voidshow() { huajian(); if(fz%fm==0) cout<<(fz/fm)< else cout< } }; fenshu: : fenshu(inti,intj) { fz=i;fm=j; } voidfenshu: : huajian() { intt; while(fm==0) { cout<<"分母不能为零,请重新输入: "< setData(); } if(fz<=fm) t=fz; else t=fm; for(inti=2;i<=t;) { if(fz%i==0&&fm%i==0) { fz=fz/i; fm=fm/i; } else i++; } } fenshuoperator+(fenshu&a,fenshu&b) { fenshutemp; temp.fz=a.fz*b.fm+b.fz*a.fm; temp.fm=a.fm*b.fm; returntemp; } fenshuoperator-(fenshu&a,fenshu&b) {fenshutemp; temp.fz=a.fz*b.fm-b.fz*a.fm; temp.fm=a.fm*b.fm; returntemp; } fenshufenshu: : operator*(fenshu&a) { fenshutemp; temp.fz=a.fz*fz; temp.fm=a.fm*fm; returntemp; } fenshufenshu: : operator/(fenshu&a) { fenshutemp; temp.fz=a.fz*fm; temp.fm=a.fm*fz; returntemp; } fenshu&fenshu: : operator=(fenshu&a) { fz=a.fz; fm=a.fm; return*this; } voidmain() { fenshuA,B,A1,A2,A3,A4,A5; A.setData(); A.huajian(); A.show(); cout< B.setData(); B.huajian(); B.show(); cout< A1=A+B; A1.show(); A2=A-B; A2.show(); A3=A*B; A3.show(); A4=A/B; A4.show(); A5=A; A5.show(); } 4. #include usingnamespacestd; classvehicle { doublespeed; public: vehicle(inta): speed(a){} virtualvoidRun(); virtualvoidStop(); }; voidvehicle: : Run() { cout<<"speed="< } voidvehicle: : Stop() { cout<<"speed=1"; } classbicycle: virtualpublicvehicle { private: doublespeed; public: virtualvoidRun(); virtualvoidStop(); bicycle(inta): vehicle(a) { speed=a; } }; voidbicycle: : Run() { cout<<"speed="< } voidbicycle: : Stop() { cout<<"speed=2"; } classmotorcar: virtualpublicvehicle { private: doublespeed; public: virtualvoidRun(); virtualvoidStop(); motorcar(inta): vehicle(a) { speed=a; } }; voidmotorcar: : Run() { cout<<"speed="< } voidmotorcar: : Stop() { cout<<"speed=3"; } classmotorcycle: publicbicycle,publicmotorcar { private: doublespeed; public: voidRun(); voidStop(); motorcycle(inta): vehicle(a),bicycle(a),motorcar(a) { speed=a; } }; voidmotorcycle: : Run() { cout<<"speed="< } voidmotorcycle: : Stop() { cout<<"speed=4"; } intmain() { vehicleA(100),*p; bicycleAB(90); motorcarAC(80); motorcycleABC(70); cout<<"A: "; A.Run(); A.Stop(); cout<<'\n'<<"AB: "; AB.Run(); AB.Stop(); cout<<'\n'<<"AC: "; AC.Run(); AC.Stop(); cout<<'\n'<<"ABC: "; ABC.Run(); ABC.Stop(); cout<<'\n'<<"用指针调用: "; cout<<'\n'<<"A: "; p=&A; p->Run(); p->Stop(); cout<<'\n'<<"AB: "; p=&AB; p->Run(); p->Stop(); cout<<'\n'<<"AC: "; p=&AC; p->Run(); p->Stop(); cout<<'\n'<<"ABC: "; p=&ABC; p->Run(); p->Stop(); cout<<'\n'; return0; } 5. #include usingnamespacestd; classContainer { virtualdoublearea()=0; virtualdoublevolume()=0; public: virtualvoidshow()=0; }; classSphere: publicContainer { private: doubler; public: Sphere(doublea): r(a){} doublearea() { return4*3.14*r*r; } doublevolume() { return(double)4/3*3.14*r*r*r; } voidshow() { cout<<"球面积为: "< cout<<"球体积为: "< } }; classCylinder: publicContainer { private: doubler,h; public: Cylinder(doublea=0,doubleb=0): r(a),h(b){} doublearea() { return2*3.14*r*(h+r); } doublevolume() { return3.14*r*r*h; } voidshow() { cout<<"圆柱体面积为: "< cout<<"圆柱体体积为: "< } }; intmain() { Container*pr; SphereA (1); pr=&A; pr->show(); CylinderB(1,2); pr=&B; pr->show(); return0; } 6. #include usingnamespacestd; classTime { private: inthour; intminute; intsecond; public: Time(int=0,int=0,int=0); ~Time(){} voidsethour(int); voidsetminute(int); voidsetsecond(int); intgethour(); intgetsecond(); intgetminute(); voidset(int=0,int=0,int=0); voidshow(); Time&operator++(int); Time&operator--(int); }; Time: : Time(inth,intm,ints) { if(s>59) { s%=60; m=m+s/60; } if(m>59) { m%=60; h=h+m/60; } if(h>23)h%=24; hour=h; minute=m; second=s; } voidTime: : sethour(inth) { if(h>23)h%=24; hour=h; } voidTime: : setminute(intm) { if(minute>59) { minute%=60; hour=hour+minute/60; } if(hour>23)hour%=24; minute=m; } voidTime: : setsecond(ints) { if(s>59) { minute=minute+s/60; s%=60; } if(minute>59) { hour=hour+minute/60; minute%=60; } if(hour>23)hour%=24; second=s; } intTime: : gethour() { returnhour; } intTime: : getsecond() { returnsecond; } intTime: : getminute() { returnminute; } voidTime: : set(inth,intm,ints) { if(s>59) { m=m+s/60; s%=60; } if(m>59) { h=h+m/60; m%=60; } if(h>23)h%=24; hour=h; minute=m; second=s; } voidTime: : show() { cout< "< "< } Time&Time: : operator++(int) { second++; if(second>59) { minute=minute+second/60; second%=60; } if(minute>59) { hour=hour+minute/60; minute%=60; } if(hour>23)hour%=24; return*this; } Time&Time: : operator--(int) { second--; if(second<0) { minute--; second=59; } if(minute<0) { minute=59; hour--; } if(hour<0)hour=0; return*this; } intmain() { Timet; intx,y,z; chartemp; cout<<"现在初始化计数器(HourMinuteSecond): "; cin>>x;cin>>y;cin>>z; t.set(x,y,z); cout<<"现在时间是: "; t.show(); do { cout<<"输入*重新设置计数器;"< cout<<"输入+计数器递加,输入-计数器递减;"< cout<<"输入字母o计数器清零;"< cout<<"输入q退出计数器。 "< cout<<"请输入>"; cin>>temp; switch(temp) { case'*': cout<<"现在初始化计数器(HourMinuteSecond): "; cin>>x;cin>>y;cin>>z; t.set(x,y,z); cout<<"现在时间是: "; t.show(); break; case'+': t++; cout<<"现在时间是: "; t.show(); break; case'-':
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 模板 程序设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)