/* Copyright (c) 2012, 烟台大学计算机学院
* All rights reserved.
* 文件名称:text.cpp
* 作 者: 胡颖
*完成日期:2013年6月4日
* 版 本 号:v1.0
*
* 输入描述:无
* 问题描述:设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
* 程序输出:输出定义的几个立体的体积和表面积
* 问题分析:无
* 算法设计:略
*/
#include <iostream>
using namespace std;
//抽象类CSolid
class CSolid
{
public:
virtual double surfaceArea() const =0;//表面积的纯虚函数
virtual double volume() const =0;//体积的纯虚函数
};
//派生CCube(正方体)类
class CCube:public CSolid
{
public:
CCube(double len):length(len) {}
virtual double surfaceArea() const
{
return 6*length*length;
}
virtual double volume() const
{
return length*length*length;
}
private:
double length;
};
//派生CBall(球体)类
class CBall:public CSolid
{
public:
CBall(double r):radius(r) {}
virtual double surfaceArea() const
{
return 4*3.1415926*radius*radius;
}
virtual double volume() const
{
return (4/3)*3.1415926*radius*radius*radius;
}
private:
double radius;
};
//派生CCylinder(圆柱体)类
class CCylinder:public CSolid
{
public:
CCylinder(double r,double h):radius(r),height(h) {}
virtual double surfaceArea() const
{
return 2*3.1415926*radius*radius+2*3.1415926*radius*height;
}
virtual double volume() const
{
return 3.1415926*radius*radius*height;
}
private:
double radius;
double height;
};
int main()
{
CSolid *p;
double s,v;
//输出正方体表面积及体积
CCube x(30);
cout<<"正方体边长为30:"<<endl;
p=&x;
s=p->surfaceArea();
v=p->volume();
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
//输出球体表面积及体积
CBall y(4.5);
cout<<"球体半径为4.5:"<<endl;
p=&y;
s=p->surfaceArea();
v=p->volume();
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
//输出圆柱体的表面积及体积
CCylinder z(10,20);
cout<<"圆柱体半径为10,高为20:"<<endl;
p=&z;
s=p->surfaceArea();
v=p->volume();
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
return 0;
}
运行结果: