作业内容:
建立一个抽象类container(含两个纯虚函数),再由它派生出正方体类,球体类,圆柱体类。使用基类指针访问虚函数。
个人体会:
我还是觉得求表面积和体积的函数定义成 void型比较好写,毕竟如果定义成有返回值类型double的话,后面的主程序还要另外生成一个空间来存放结果,略麻烦。
编写代码:
# include <iostream>
# include <string>
using namespace std;
class container{
public:
container(double radius1)
{
radius=radius1;
}
virtual double surface_area()=0;
virtual double volume()=0;
protected:
double radius;
};
class cube:public container{
public:
cube(double radius1):container(radius1)
{}
double surface_area()
{
cout<<"正方体的表面积为";
return (radius*radius*6);
}
double volume()
{
cout<<"正方体的体积为";
return (radius*radius*radius);
}
};
class sphere:public container{
public:
sphere(double radius1):container(radius1)
{}
double surface_area()
{
cout<<"球体的表面积为";
return (radius*radius*4*3.14);
}
double volume()
{
cout<<"球体的体积为";
return (radius*radius*radius*3.14*4/3);
}
};
class cylinder:public container{
public:
cylinder(double radius1,double h1):container(radius1)
{
h=h1;
}
double surface_area()
{
cout<<"圆柱体的表面积为";
return (radius*3.14*2*h+3.14*radius*radius*2);
}
double volume()
{
cout<<"圆柱体的体积为";
return (radius*radius*3.14*h);
}
private:
double h;
};
int main()
{
container *pc;
cube c(6.0);
sphere s(5.0);
cylinder y(5.0,6.0);
pc=&c;
double c1=pc->surface_area();
cout<<c1<<endl;
double c2=pc->volume();
cout<<c2<<endl;
cout<<"*****************"<<endl;
pc=&s;
double s1=pc->surface_area();
cout<<s1<<endl;
double s2=pc->volume();
cout<<s2<<endl;
cout<<"*****************"<<endl;
pc=&y;
double y1=pc->surface_area();
cout<<y1<<endl;
double y2=pc->volume();
cout<<y2<<endl;
return 0;
}