/*
* 程序的版权和版本声明部分
* Copyright (c)2014, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: array.cpp
* 作 者:
* 完成日期: 2014 年 05 月 27 日
* 版本号: v1.0
* 问题描述:
设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。
设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,
定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,
能够求出正方体、球体及圆柱体对象的表面积及体积。
*/
#include <iostream>
#include <Cmath>
#define PI 3.14159
using namespace std;
class CSolid
{
public:
virtual double area() const =0;
virtual double volume() const =0;
};
class CCube: public CSolid //正方体
{
private:
double a;
public:
CCube(double x):a(x) {}
double area() const
{
return (6*a*a);
}
double volume() const
{
return (a*a*a);
}
~CCube() {}
};
class CBall : public CSolid //球体
{
private:
double r;
public:
CBall(double x):r(x) {}
double area()const
{
return (4*PI*r*r);
}
double volume()const
{
double v=r*r*r;
return ((4*PI*v)/3);
}
~CBall(){}
};
class CCylinder :public CSolid //圆柱体
{
private:
double r,h;
public:
CCylinder(double x,double y):r(x),h(y){}
double area()const
{
double c=2*PI*r*h;
double cy=4*PI*r;
return (c+cy);
}
double volume()const
{
return (h*PI*r*r);
}
~CCylinder() {}
};
int main()
{
CSolid *p;
CCube c1(5.0);
p=&c1;
cout<<"正方体的体积为:"<<p->area()<<endl;
cout<<"正体的表面积为:"<<p->volume()<<endl;
CBall c2(4.0);
p=&c2;
cout<<"球体的体积为:"<<p->area()<<endl;
cout<<"球体的表面积为:"<<p->volume()<<endl;
CCylinder c3(4.0,5.0);
p=&c3;
cout<<"圆柱体的体积为:"<<p->area()<<endl;
cout<<"圆柱体的表面积为:"<<p->volume()<<endl;
return 0;
}
心得:千辛万苦啊。。。。
基类后有const的后面派生类里面都要加!!!!
p->。。。
*p.。。。