虚函数和多态_2
描述
由于球体和圆柱体都可以看做由圆继承而来,所以可以定义圆类Circle作为基类。在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。由Circle类派生Sphere类和Column类。在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。
输入
球的半径
圆柱体的底面半径和高度
输出
球的表面积和体积
圆柱体的表面积和体积
样例输入
20
10 30
样例输出
s.area = 5024
s.volume= 33493.3
c.area = 2512
c.volume= 9420
代码
#include <iostream>
using namespace std;
const double pi = 3.14;
class Circle
{
double radius;
public:
Circle(double a);
double getr();
virtual void area()=0;
virtual void volume()=0;
};
Circle::Circle(double a):radius(a){};
double Circle::getr(){return radius;}
class Sphere:public Circle
{
public:
Sphere(double a);
void area();
void volume();
};
Sphere::Sphere(double a):Circle(a){}
void Sphere::area(){cout<<"s.area = "<<4*pi*getr()*getr()<<endl;}
void Sphere::volume(){cout<<"s.volume= "<<4.0/3*pi*getr()*getr()*getr()<<endl;}
class Column:public Circle
{
double h;
public:
Column(double a,double b);
void area();
void volume();
};
Column::Column(double a,double b):Circle(a),h(b){}
void Column::area(){cout<<"c.area = "<<2*pi*getr()*getr()+2*pi*getr()*h<<endl;}
void Column::volume(){cout<<"c.volume= "<<pi*getr()*getr()*h<<endl;}
int main()
{
double a,b,c;
cin >> a >> b >> c;
Sphere A(a);
Column B(b,c);
Circle *p;
p = &A; p->area(); p->volume();
p = &B; p->area(); p->volume();
return 0;
}