28刘小虎C++实验3文档格式.docx
《28刘小虎C++实验3文档格式.docx》由会员分享,可在线阅读,更多相关《28刘小虎C++实验3文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
x<
endl;
}
voidf2(doublex)
f2(double)”<
2*x<
voidf3(doublex)
f3(double)”<
3*x<
classD:
publicB{
virtualvoidf1(doublex)
”D:
};
intmain()
{Dd;
B*pb=&
d;
D*pd=&
pb->
f1(1.23);
f2(1.23);
f3(1.23);
f3(3.14);
return0;
解答:
2.编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。
要求将小时范围限制在大于等于0,分钟范围限制在0~59,秒钟范围限制在0~59秒。
【提示】
时间类Time{
Time(inth=0,intm=0,ints=0);
Timeoperator+(Time&
);
voiddisptime(string);
private:
inthourse;
intminutes;
intseconds;
、
代码如下
string>
classTime
{
Time(inth=0,intm=0,ints=0);
Timeoperator+(Time&
voiddisplay(string);
inthours;
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<
s<
hours<
"
minutes<
seconds<
inth,m,s;
do
{
cout<
输入第一个时间时分秒"
cin>
>
h>
m>
s;
}
while(h<
0||m<
0||m>
59||s<
0||s>
59);
Timet(h,m,s);
输入第二个时间时分秒"
TimeT(h,m,s),t_total;
t_total=t+T;
t_total.display("
输出结果(时/分/秒):
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<
#definePI3.1415927
classcontainer
protected:
container(doubleradius1){};
classcube:
publiccontainer
cube(doubler):
container(r){radius=r;
}
doublesurface_area()
{
return6*radius*radius;
}
doublevolume()
returnradius*radius*radius;
}
classsphere:
sphere(doubler):
container(r)
radius=r;
return4*PI*radius*radius;
return4*PI*radius*radius*radius/3;
classcylinder:
doubleheight;
cylinder(doubler,doubleh):
height=h;
return2*PI*radius*radius+2*PI*radius*height;
returnPI*radius*radius*height;
intmain()
{
cubea(6.0);
sphereb(5.0);
cylinderc(5.0,6.0);
正方体表面积:
a.surface_area()<
正方体体积:
a.volume()<
球表面积:
b.surface_area()<
球体积:
b.volume()<
圆柱体表面积:
c.surface_area()<
圆柱体体积:
c.volume()<
4.编写一个程序,用于进行集合的并、差和交运算。
例如输入整数集合{954367}和{2469},计算出它们进行集合的并、差和交运算后的结果。
i.可用以下表达式实现整数集合的基本运算:
s1+s2两个整数集合的并运算
s1-s2两个整数集合的差运算
s1*s2两个整数集合的交运算
ii.参考以下Set类的框架,用于完成集合基本运算所需的各项功能。
classset{
set:
set();
voidset:
input(intd);
intset:
length();
getd(inti);
disp();
setset:
operator+(sets1);
operator-(sets1);
operator*(sets1);
operator=(sets1);
intlen;
ints[MAX];
代码如下:
algorithm>
voidjiao(charjiHe1[],intcount1,charjiHe2[],intcount2);
voidbing(charjiHe1[],intcount1,charjiHe2[],intcount2);
voidcha(charjiHe1[],intcount1,charjiHe2[],intcount2);
voiddiKaEr(charjiHe1[],intcount1,charjiHe2[],intcount2);
voidoutput(chara[],intn);
#defineN50
intchoice;
cout<
"
1.交集"
<
endl;
2.并集"
3.差集"
4.笛卡尔集"
cin>
choice;
if(choice==1){
charjiHe1[N],jiHe2[N];
intcount1,count2;
请输入集合1数的个数"
;
count1;
请输入集合1的元素"
for(inti=0;
i<
count1;
i++)
jiHe1[i];
请输入集合2数的个数"
count2;
请输入集合2的元素"
for(intj=0;
j<
count2;
j++)
jiHe2[j];
jiao(jiHe1,count1,jiHe2,count2);
elseif(choice==2){
bing(jiHe1,count1,jiHe2,count2);
elseif(choice==3){
cha(jiHe1,count1,jiHe2,count2);
elseif(choice==4){
diKaEr(jiHe1,count1,jiHe2,count2);
elsereturn0;
system("
pause"
voidjiao(charjiHe1[],intcount1,charjiHe2[],intcount2)
intnum=0;
chara[N];
for(intj=0;
if(jiHe1[i]==jiHe2[j])
a[num++]=jiHe1[i];
sort(a,a+num);
交集为:
output(a,num);
voidbing(charjiHe1[],intcount1,charjiHe2[],intcount2)
intnum1=0;
intcount=0;
charb[N];
b[num1++]=jiHe1[i];
j++){
for(intk=0;
k<
k++)
if(jiHe2[j]!
=jiHe1[k]){
count++;
if(count==count1){
b[num1++]=jiHe2[j];
count=0;
sort(b,b+num1);
并集为:
output(b,num1);
voidoutput(chara[],intn)
{"
n-1;
a[i]<
"
;
a[n-1];
}"
voidcha(charjiHe1[],intcount1,charjiHe2[],intcount2)
charc[N];
i++){
if(jiHe1[i]!
=jiHe2[j]){
num++;
if(num==count2){
c[num1++]=jiHe1[i];
num=0;
sort(c,c+num1);
差集为:
output(c,num1);
voiddiKaEr(charjiHe1[],intcount1,charjiHe2[],intcount2)
笛卡尔积为"
//cout<
jiHe1[i]<
jiHe2[j]<
三、结论(写本次实验的收获)