【6.14】给出下面的抽象基类container:
class container{
protected:
double radius;
public:
container(double radius1)
{ radius=radius1; }
virtual double surface_area()=0;
virtual double volume()=0;
};
要求:建立3个继承container的派生类cube、sphere与cylinder,让每一个派生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体以及半径为5.0和高为6.0的圆柱体的表面积和体积。
#include<iostream>
using namespace std;
class container{
protected:
double radius;
public:
container(double radius1)
{ radius=radius1; }
virtual double surface_area()=0;
virtual double volume()=0;
};
class cube:public container{
public:
cube(double radius1):container(radius1)
{ radius=radius1; }
double surface_area()
{ return radius*radius*6; }
double volume()
{ return radius*radius*radius; }
};
class sphere:public container{
public:
sphere(double radius1):container(radius1)
{ radius=radius1; }
double surface_area()
{ return radius*radius*4*3.14; }
double volume()
{ return radius*radius*radius*3.14*4/3; }
private:
double r;
};
class cylinder:public container{
public:
cylinder(double radius1,double H):container(radius1)
{ radius=radius1;h=H; }
double surface_area()
{ return 2*3.14*radius*radius+radius*2*3.14*h; }
double volume()
{ return 3.14*radius*radius*h; }
private:
double h;
};
int main()
{
cube c(6);
sphere s(5);
cylinder cy(5,6);
cout<<"正方体的表面积是:"<<c.surface_area()<<endl;
cout<<"正方体的体积是:"<<c.volume()<<endl;
cout<<"球体的表面积是:"<<s.surface_area()<<endl;
cout<<"球体的体积是:"<<s.volume()<<endl;
cout<<"圆柱体的表面积是:"<<cy.surface_area()<<endl;
cout<<"圆柱体的体积是:"<<cy.volume()<<endl;
return 0;
}