28刘小虎C++实验3.docx
- 文档编号:9433450
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:75.66KB
28刘小虎C++实验3.docx
《28刘小虎C++实验3.docx》由会员分享,可在线阅读,更多相关《28刘小虎C++实验3.docx(17页珍藏版)》请在冰豆网上搜索。
28刘小虎C++实验3
实验3多态性
实验课程名:
高级语言程序设计Ⅱ
专业班级:
12网工2班学号:
201240420228姓名:
刘小虎
实验时间:
5-12.-5.19实验地点:
K4-201指导教师:
祁文青
3.1实验目的和要求
(1)了解多态性的概念。
(2)掌握运算符重载的基本方法。
(3)掌握虚函数的定义和使用方法。
(4)掌握纯虚函数和抽象类的概念和用法。
3.2实验内容与步骤
1.分析并调试下列程序,写出程序的输出结果,并解释输出结果。
//test5_1.cpp
#include
usingnamespacestd;
classB{
public:
virtualvoidf1(doublex)
{cout<<”B:
:
f1(double)”< } voidf2(doublex) {cout<<”B: : f2(double)”<<2*x< } voidf3(doublex) {cout<<”B: : f3(double)”<<3*x< } } classD: publicB{ public: virtualvoidf1(doublex) {cout<<”D: : f1(double)”< } voidf2(doublex) {cout<<”D: : f2(double)”<<2*x< } voidf3(doublex) {cout<<”D: : f3(double)”<<3*x< } }; intmain() {Dd; B*pb=&d; D*pd=&d; pb->f1(1.23); pb->f1(1.23); pb->f2(1.23); pb->f3(1.23); pb->f3(3.14); return0; } 解答: 2.编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。 要求将小时范围限制在大于等于0,分钟范围限制在0~59,秒钟范围限制在0~59秒。 【提示】 时间类Time{ public: Time(inth=0,intm=0,ints=0); Timeoperator+(Time&); voiddisptime(string); private: inthourse; intminutes; intseconds; }; 、 解答: 代码如下 #include #include usingnamespacestd; classTime { public: Time(inth=0,intm=0,ints=0); Timeoperator+(Time&); voiddisplay(string); private: inthours; intminutes; intseconds; }; Time: : Time(inth,intm,ints) { hours=h; minutes=m; seconds=s; } TimeTime: : operator+(Time&t1) { Timep; p.seconds=seconds+t1.seconds; inttemp=p.seconds; p.seconds=temp%60; p.minutes=minutes+t1.minutes+temp/60; temp=p.minutes; p.minutes=temp%60; p.hours=hours+t1.hours+temp/60; returnp; } voidTime: : display(strings) { cout< "< "< } intmain() { inth,m,s; do { cout<<"输入第一个时间时分秒"< cin>>h>>m>>s; } while(h<0||m<0||m>59||s<0||s>59); Timet(h,m,s); do { cout<<"输入第二个时间时分秒"< cin>>h>>m>>s; } while(h<0||m<0||m>59||s<0||s>59); TimeT(h,m,s),t_total; t_total=t+T; t_total.display("输出结果(时/分/秒): "); cout<<"201240420228,刘小虎"< return0; } 3.给出下面的抽象基类container; classcontainer { protected: doubleradius; public: container(doubleradius1); virtualdoublesurface_area()=0; virtualdoublevolume()=0; }; 要求建立3个继承container的派生类cube、sphere与cylinder,让每一个派生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。 要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。 解答: 代码如下 #include usingnamespacestd; #definePI3.1415927 classcontainer { protected: doubleradius; public: container(doubleradius1){}; virtualdoublesurface_area()=0; virtualdoublevolume()=0; }; classcube: publiccontainer { public: cube(doubler): container(r){radius=r;} doublesurface_area() { return6*radius*radius; } doublevolume() { returnradius*radius*radius; } }; classsphere: publiccontainer { public: sphere(doubler): container(r) { radius=r; } doublesurface_area() { return4*PI*radius*radius; } doublevolume() { return4*PI*radius*radius*radius/3; } }; classcylinder: publiccontainer { protected: doubleheight; public: cylinder(doubler,doubleh): container(r) { radius=r;height=h; } doublesurface_area() { return2*PI*radius*radius+2*PI*radius*height; } doublevolume() { returnPI*radius*radius*height; } }; intmain() { cubea(6.0); sphereb(5.0); cylinderc(5.0,6.0); cout<<"正方体表面积: "< cout<<"正方体体积: "< cout<<"球表面积: "< cout<<"球体积: "< cout<<"圆柱体表面积: "< cout<<"圆柱体体积: "< cout<<"201240420228,刘小虎"< return0; } 4.编写一个程序,用于进行集合的并、差和交运算。 例如输入整数集合{954367}和{2469},计算出它们进行集合的并、差和交运算后的结果。 【提示】 i.可用以下表达式实现整数集合的基本运算: s1+s2两个整数集合的并运算 s1-s2两个整数集合的差运算 s1*s2两个整数集合的交运算 ii.参考以下Set类的框架,用于完成集合基本运算所需的各项功能。 classset{ public: set: : set(); voidset: : input(intd); intset: : length(); intset: : getd(inti); voidset: : disp(); setset: : operator+(sets1); setset: : operator-(sets1); setset: : operator*(sets1); setset: : operator=(sets1); protected: intlen; ints[MAX]; }; 解答: 代码如下: #include #include usingnamespacestd; voidjiao(charjiHe1[],intcount1,charjiHe2[],intcount2); voidbing(charjiHe1[],intcount1,charjiHe2[],intcount2); voidcha(charjiHe1[],intcount1,charjiHe2[],intcount2); voiddiKaEr(charjiHe1[],intcount1,charjiHe2[],intcount2); voidoutput(chara[],intn); #defineN50 intmain() { intchoice; cout<<"1.交集"< cout<<"2.并集"< cout<<"3.差集"< cout<<"4.笛卡尔集"< cin>>choice; if(choice==1){ charjiHe1[N],jiHe2[N]; intcount1,count2; cout<<"请输入集合1数的个数"; cin>>count1; cout<<"请输入集合1的元素"< for(inti=0;i cin>>jiHe1[i]; cout<<"请输入集合2数的个数"; cin>>count2; cout<<"请输入集合2的元素"< for(intj=0;j cin>>jiHe2[j]; jiao(jiHe1,count1,jiHe2,count2); } elseif(choice==2){ charjiHe1[N],jiHe2[N]; intcount1,count2; cout<<"请输入集合1数的个数"; cin>>count1; cout<<"请输入集合1的元素"< for(inti=0;i cin>>jiHe1[i]; cout<<"请输入集合2数的个数"; cin>>count2; cout<<"请输入集合2的元素"< for(intj=0;j cin>>jiHe2[j]; bing(jiHe1,count1,jiHe2,count2); } elseif(choice==3){ charjiHe1[N],jiHe2[N]; intcount1,count2; cout<<"请输入集合1数的个数"; cin>>count1; cout<<"请输入集合1的元素"< for(inti=0;i cin>>jiHe1[i]; cout<<"请输入集合2数的个数"; cin>>count2; cout<<"请输入集合2的元素"< for(intj=0;j cin>>jiHe2[j]; cha(jiHe1,count1,jiHe2,count2); } elseif(choice==4){ charjiHe1[N],jiHe2[N]; intcount1,count2; cout<<"请输入集合1数的个数"; cin>>count1; cout<<"请输入集合1的元素"< for(inti=0;i cin>>jiHe1[i]; cout<<"请输入集合2数的个数"; cin>>count2; cout<<"请输入集合2的元素"< for(intj=0;j cin>>jiHe2[j]; diKaEr(jiHe1,count1,jiHe2,count2); } elsereturn0; system("pause"); return0; } voidjiao(charjiHe1[],intcount1,charjiHe2[],intcount2) { intnum=0; chara[N]; for(inti=0;i for(intj=0;j { if(jiHe1[i]==jiHe2[j]) a[num++]=jiHe1[i]; } sort(a,a+num); cout<<"交集为: "; output(a,num); } voidbing(charjiHe1[],intcount1,charjiHe2[],intcount2) { intnum1=0; intcount=0; charb[N]; for(inti=0;i { b[num1++]=jiHe1[i]; } for(intj=0;j for(intk=0;k { if(jiHe2[j]! =jiHe1[k]){ count++; } if(count==count1){ b[num1++]=jiHe2[j]; } } count=0; } sort(b,b+num1); cout<<"并集为: "; output(b,num1); } voidoutput(chara[],intn) { cout<<"{";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 28 刘小虎 C+ 实验
