[cpp] view plaincopy
/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 作者: 杨绍宁
* 完成日期: 2013年 6 月 3日
* 版本号: v1.0
* 输入描述:无
* 问题描述:抽象类CSolid。
* 程序输出:无
*/
#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double area() const=0;
virtual double volume() const=0;
};
class CCube:public CSolid //正方体
{
public:
CCube(double aa,double bb,double hh):a(aa),b(bb),h(hh){}
double area()const;
double volume() const;
protected:
double a;
double b;
double h;
};
double CCube::area()const
{
double s;
s=(a*b+a*h+b*h)*2;
return s;
}
double CCube::volume() const
{
double v;
v=a*b*h;
return v;
}
class CBall:public CSolid //球体
{
public:
CBall(double rr):r(rr){}
virtual double area() const;
virtual double volume() const;
protected:
double r;
};
double CBall::area() const
{
double s;
s=4*3.14*r*r;
return s;
}
double CBall::volume() const
{
double v;
v=(4*r*r*r)/3;
return v;
}
class CCylinde:public CSolid //圆柱体
{
public:
CCylinde(double rr,double hh):r(rr),h(hh){}
virtual double area()const;
virtual double volume()const;
protected:
double r,h;
};
double CCylinde::area()const
{
double s;
s=2*3.14*r*r+2*3.14*r*h;
return s;
}
double CCylinde::volume()const
{
double v;
v=3.14*r*r*h;
return v;
}
int main()
{
CCube c1(2,3,4);
CBall c2(2);
CCylinde c3(1,2);
CSolid *pt;
pt=&c1;
cout<<"表面积"<<pt->area()<<" 体积"<<pt->volume()<<endl;
pt=&c2;
cout<<"表面积"<<pt->area()<<" 体积"<<pt->volume()<<endl;
pt=&c3;
cout<<"表面积"<<pt->area()<<" 体积"<<pt->volume()<<endl;
return 0;
}
结果:
感受:呵呵!!!