虚函数和多态_2

虚函数和多态_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 
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; 
}

你可能感兴趣的:(虚函数和多态_2)