题目:编写程序计算柱体的表面积和体积。
柱体的底面有圆形(Circle)和长方形(Rectangle)两种,设计一个公共基类Shape作为圆形和长方形的抽象基类,在其中定义求面积和周长的纯虚函数。柱体的底面既可以是圆形(Circle)也可以是长方形(Rectangle)。要求合理设计各个类的继承结构,写出能运行的完整程序,利用多态技术使程序结构简洁和易于扩展,并编写volume和surfacearea函数,分别计算柱体的体积和表面积,在main函数中分别定义一个圆形和长方形的对象,并输出由它们构成的圆柱体和长方体的表面积和体积。最后需指出程序中哪里体现了多态的应用。提示:柱体的体积等于底面积*高,柱体的侧面积等于底面周长*高。
class Shape //抽象类
{
virtual double area() = 0; //求面积
virtual double perimeter() = 0; //求周长
};
double volume(Shape *p,double height)//求柱体的体积,参数p是指向底面的指针,height是柱体的高度,返回值为体积
double surfacearea(Shape *p,double height)//求柱体的表面积,height是柱体的高度,表面积等于两个底面积与侧面积的和,返回值为表面积
实现代码:
#include<iostream>
using namespace std;
class Shape
{
public:
virtual double area()=0;
virtual double perimeter()=0;
};
class Circle:public Shape
{
private:
double r;
public:
Circle(double r_)
{
r=r_;
}
virtual double area()
{
return (r*r*3.14);
}
virtual double perimeter()
{
return(2*3.14*r);
}
};
class Rectangle:public Shape
{
private:
double h,l;
public:
Rectangle(double h_,double l_)
{
h=h_;
l=l_;
}
virtual double area()
{
return (h*l);
}
virtual double perimeter()
{
return(h*2+l*2);
}
};
class Cylinder:public Circle
{
public:
Cylinder(double r_):Circle(r_){}
double volume(Shape *p,double height)
{
return(p->area()*height);
}
double surfacearea(Shape *p,double height)
{
return(p->perimeter()*height+p->area()*2);
}
};
class Prism:public Rectangle
{
public:
Prism(double h_,double r_):Rectangle(h_,r_){};
double volume(Shape *p,double height)
{
return(p->area()*height);
}
double surfacearea(Shape *p,double height)
{
return(p->perimeter()*height+p->area()*2);
}
};
void main()
{
Shape* p1;
Cylinder x1(5);
Prism y1(3,4);
p1=&x1;
cout<<"圆柱的体积:"<<x1.volume(p1,6.6)<<endl;
cout<<"圆柱的面积:"<<x1.surfacearea(p1,6.6)<<endl;
p1=&y1;
cout<<"棱柱的体积:"<<y1.volume(p1,6.6)<<endl;
cout<<"棱柱的面积:"<<y1.surfacearea(p1,6.6)<<endl;
}