多态性和虚函数Word文件下载.docx
《多态性和虚函数Word文件下载.docx》由会员分享,可在线阅读,更多相关《多态性和虚函数Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
virtualdoublearea()const=0;
};
classCircle:
publicShape
Circle(doubler):
radius(r){}
virtualdoublearea()const
{
return3.14159*radius*radius;
};
protected:
doubleradius;
classRectangle:
Rectangle(doublew,doubleh):
width(w),height(h){}
returnwidth*height;
}
doublewidth,height;
classTriangle:
Triangle(doublew,doubleh):
virtualdoublearea()const
return0.5*width*height;
voidprintArea(constShape&
s)
cout<
<
s.area()<
endl;
}
intmain()
floatr,a,b,w,h;
fixed<
setprecision
(2);
cin>
>
r;
Circlecircle(r);
"
areaofcircle="
;
printArea(circle);
a>
b;
Rectanglerectangle(a,b);
areaofrectangle="
printArea(rectangle);
w>
h;
Triangletriangle(w,h);
areaoftriangle="
printArea(triangle);
return0;
ProblemB:
C++习题虚函数-计算图形面积
编写一个程序,定义抽象基类Shape,由它派生出5个派生类:
Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。
用虚函数分别计算几种图形面积,并求它们之和。
要求用基类指针数组,使它每一个元素指向一个派生类对象。
正方形的边长
梯形的上底和下底,高
所有图形面积之和(结果保留两位小数)
3.5
2.04.53.2
totalofallareas=574.11
classSquare:
Square(doubles):
side(s){}
returnside*side;
doubleside;
classTrapezoid:
Trapezoid(doublet,doubleb,doubleh):
top(t),bottom(b),height(h){}
return0.5*(top+bottom)*height;
doubletop,bottom,height;
floatr,a,b,w1,w2,w,h;
a;
Squaresquare(a);
w1>
w2>
Trapezoidtrapezoid(w1,w1,h);
Shape*pt[5]={&
circle,&
square,&
rectangle,&
trapezoid,&
triangle};
doubleareas=0.0;
for(inti=0;
i<
5;
i++)
areas=areas+pt[i]->
area();
totalofallareas="
areas<
ProblemC:
抽象一个形状类
阮宝同学期待着暑假来临,知道C++不好好复习麻烦不小。
没有多态性,那就不叫面向对象,老师不划重点也能猜到。
嘿嘿,自己做个经典题,怎么变题也不怕。
老湿,再难的题还有木有?
输入四个数,前两个是矩形的长和宽,后两个是三角形的底边长和高。
分两行输出两个数,第一个是矩形的面积,第二个是三角形的面积。
3.56.4
22.4
11.2
doublea,b;
//输入矩形的长和宽
Rectangler(a,b);
//建立Rectangle类对象r,矩形长a宽b
Shape*s1=&
s1->
area()<
//输出矩形的面积
doublew,h;
Trianglet(w,h);
//建立Triangle类对象t,三角形底边长w高h
Shape&
s2=t;
s2.area();
//输出三角形面积
ProblemD:
虚函数练习:
动物2
长期的物种进化使自然界出现了生活在陆地上的陆生动物和生活在水中的水生动物。
根据已有主函数编写动物类,陆生动物类和水生动物类。
动物的体长,体重,性别;
水生动物的体长,体重,性别,游泳速度;
陆生动物的体长,体重,性别,奔跑速度;
5222f
6232m122
7242m102
height:
52
weight:
22
sex:
f
62
32
m
swimming_speed:
122
72
42
running_speed:
102
classanimal
{
animal(inth,intw,chars)
height=h;
weight=w;
sex=s;
virtualvoiddisplay()
{
height<
weight<
sex<
}
intheight;
intweight;
charsex;
classaqu_animal:
publicanimal
aqu_animal(inth,intw,chars,ints_p):
animal(h,w,s),swimming_speed(s_p){}
swimming_speed<
intswimming_speed;
classter_animal:
ter_animal(inth,intw,chars,intr_p):
animal(h,w,s),running_speed(r_p){}
running_speed<
intrunning_speed;
intmain()
inta,b,s,r;
charc;
animal*p;
b>
c;
animalpa(a,b,c);
p=&
pa;
p->
display();
c>
s;
aqu_animalpb(a,b,c,s);
pb;
ter_animalpc(a,b,c,r);
pc;
ProblemE:
交通工具信息
有一个交通工具类vehicle,将它为基类派生的有派生小车类car,卡车类truck和轮船类boat,定义这些类,并使其能够显示其各类交通工具的详细信息。
他们包含的信息,有如下几种:
1.名字
-----与输入的名字相符合
2.时速(km/h)
-----最高时速
3.耗油量(L/100km)
-----在经济时速下测得耗油量
小车类:
250km/h
14.8L/100km
卡车类:
140km/h
18L/100km
轮船类:
50km/h
8.33L/100km
输入三个派生类对应名字。
输出对应类型的信息。
Mercedes_Benz
Transport_truck
Boat
classVehicle
public:
virtualvoidshowinfo()=0;
classCar:
publicVehicle
Car(stringn):
name(n){}
virtualvoidshowinfo()
Mercedes_Benz"
250km/h"
'
\n'
14.8L/100km"
stringname;
classTruck:
Truck(stringn):
Transport_truck"
140km/h"
18L/100km"
classBoat:
Boat(stringn):
Boat"
50km/h"
8.33L/100km"
Vehicle*vp;
stringname0,name1,name2;
name0;
Carcar(name0);
name1;
Trucktruck(name1);
name2;
Boatboat(name2);
vp=&
car;
vp->
showinfo();
truck;
boat;