28刘小虎C++实验3.docx

上传人:b****7 文档编号:9433450 上传时间:2023-02-04 格式:DOCX 页数:17 大小:75.66KB
下载 相关 举报
28刘小虎C++实验3.docx_第1页
第1页 / 共17页
28刘小虎C++实验3.docx_第2页
第2页 / 共17页
28刘小虎C++实验3.docx_第3页
第3页 / 共17页
28刘小虎C++实验3.docx_第4页
第4页 / 共17页
28刘小虎C++实验3.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

28刘小虎C++实验3.docx

《28刘小虎C++实验3.docx》由会员分享,可在线阅读,更多相关《28刘小虎C++实验3.docx(17页珍藏版)》请在冰豆网上搜索。

28刘小虎C++实验3.docx

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<<"{";

for(inti=0;i

cout<

cout<

cout<<"}";

cout<

}

voidcha(charjiHe1[],intcount1,charjiHe2[],intcount2)

{

charc[N];

intnum1=0;

intnum=0;

for(inti=0;i

for(intj=0;j

if(jiHe1[i]!

=jiHe2[j]){

num++;

}

if(num==count2){

c[num1++]=jiHe1[i];

}

}

num=0;

}

sort(c,c+num1);

cout<<"差集为:

";

output(c,num1);

}

voiddiKaEr(charjiHe1[],intcount1,charjiHe2[],intcount2)

{

cout<<"笛卡尔积为";

cout<<"{";

//cout<<"<";

for(inti=0;i

for(intj=0;j

cout<<"<"<";

}

}

cout<<"}"<

}

三、结论(写本次实验的收获)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1