#include
usingnamespacestd;
classShape//定义抽象基类Shape
{
public:
virtualdoublearea()const=0;//纯虚函数
};
classCircle:publicShape
{
public:
Circle(doubler):radius(r){}//构造函数
virtualdoublearea()const//定义虚函数
{
return3.14159*radius*radius;
};
protected:
doubleradius;
};
classSquare:publicShape//定义Square(正方形)类
{
public:
Square(doubles):side(s){}
virtualdoublearea()const{returnside*side;}//定义虚函数
protected:
doubleside;
};
classRectangle:publicShape//定义Rectangle(矩形)类
{
public:
Rectangle(doublew,doubleh):width(w),height(h){}//构造函数
virtualdoublearea()const{returnwidth*height;}//定义虚函数
protected:
doublewidth,height;
};
classTrapezoid:publicShape//定义Trapezoid(梯形)类
{
public:
Trapezoid(doublet,doubleb,doubleh):top(t),bottom(t),height(h){}//构造函数
virtualdoublearea()const{return0.5*(top+bottom)*height;}//定义虚函数
protected:
doubletop,bottom,height;//上底、下底与高
};
classTriangle:publicShape//定义Triangle(三角形)类
{
public:
Triangle(doublew,doubleh):width(w),height(h){}//构造函数
virtualdoublearea()const{return0.5*width*height;}//定义虚
protected:
doublewidth,height;
};
intmain()
{
Circlecircle(12.6);//建立Circle类对象circle
Squaresquare(3.5);//建立Square类对象square
Rectanglerectangle(4.5,8.4);//建立Rectangle类对象rectangle
Trapezoidtrapezoid(2.0,4.5,3.2);//建立Trapezoid类对象trapezoid
Triangletriangle(4.5,8.4);//建立Triangle类对象
Shape*pt[5]={&circle,&square,&rectangle,&trapezoid,&triangle};//定义基类指针数组pt,使它每一个元素指向一个派生类对象
doubleareas=0.0;//areas为总面积
for(inti=0;iarea();
}
cout