/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:王昕彤
* 完成日期: 2013年 6 月 3 日
* 版本号: v1.0
* 输入描述:抽象基类CSolid
* 问题描述:
* 程序输出:
*/
#include <iostream>
using namespace std;
class CSolid //抽象基类
{
public:
virtual double areas() const=0;//表面积
virtual double volume() const=0;//体积
};
class CCube:public CSolid//正方体
{
private:
double light;//边长
public:
CCube(double l):light(l) {};
double areas()const;
double volume()const;
};
double CCube::areas()const
{
return light*light*6;
}
double CCube::volume()const
{
return light*light*light;
}
class CBall:public CSolid//球体
{
private:
double radius;//半径
public:
CBall(double r):radius(r) {};
double areas()const;
double volume()const;
};
double CBall::areas()const
{
return 4*3.14*radius*radius;
}
double CBall::volume()const
{
return (4/3)*3.14*radius*radius*radius;
}
class CCylinder:public CSolid//圆柱体
{
private:
double baseradius,height;//底面半径和高
public:
CCylinder(double b,double h):baseradius(b),height(h) {};
double areas()const;
double volume()const;
};
double CCylinder::areas()const
{
return 2*3.14*baseradius*baseradius+2*3.14*baseradius*height;
}
double CCylinder::volume()const
{
return 3.14*baseradius*baseradius*height;
}
int main()
{
CSolid *p;
double s,v;
CCube c1(5);//建立CCube类对象c1,参数为长方体边长
p=&c1;
s=p->areas();
v=p->volume();
cout<<"长方体的边长为5"<<endl;
cout<<"其表面积为:"<<s<<endl;
cout<<"其体积为:"<<v<<endl;
cout<<endl;
CBall r1(10.2);//建立CBall类对象r1,参数为球体的半径
p=&r1;
s=p->areas();
v=p->volume();
cout<<"球体的半径为10.2"<<endl;
cout<<"其表面积为:"<<s<<endl;
cout<<"其体积为:"<<v<<endl;
cout<<endl;
CCylinder t1(4.5,8.4); //建立CCylinder类对象t1,参数为圆柱体的底面半径和高
p=&t1;
s=p->areas();
v=p->volume();
cout<<"圆柱体的底面半径为4.5,高为8.4"<<endl;
cout<<"其表面积为:"<<s<<endl;
cout<<"其体积为:"<<v<<endl;
cout<<endl;
return 0;
}
运行结果: