项目要求
设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
代码如下
#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double area()=0;
virtual double volume()=0;
};
class CCube:public CSolid
{
private:
double length;
public:
CCube(double l):length(l) {}
double volume()
{
return length*length*length;
}
double area()
{
return length*length*6;
}
};
class CBall:public CSolid
{
private:
double radium;
public:
CBall(double r):radium(r) {}
double volume()
{
return radium*radium*radium*3.14*4.0/3;
}
double area()
{
return radium*radium*3.14*4;
}
};
class CCylinder:public CSolid
{
private:
double radium;
double height;
public:
CCylinder(double r,double h):radium(r),height(h) {}
double volume()
{
return radium*radium*3.14*height;
}
double area()
{
return (radium*radium*3.14*2+radium*3.14*2*height);
}
};
int main()
{
CCube ccu(5);
CBall cb(4.5);
CCylinder ccy(2,6.5);
CSolid *p;
p=&ccu;
cout<<"边长为5的正方体:"<<endl<<"体积:"<<p->volume()<<"\n面积:"<<p->area();
p=&cb;
cout<<"\n\n半径为4.5的球体:"<<endl<<"体积:"<<p->volume()<<"\n面积:"<<p->area();
p=&ccy;
cout<<"\n\n底面半径为2,高为6.5的圆柱体:"<<endl<<"体积:"<<p->volume()<<"\n面积:"<<p->area();
return 0;
}
运行结果
学习心得
main函数中也可以修改为:
int main()
{
CCube ccu(5);
CBall cb(4.5);
CCylinder ccy(2,6.5);
CSolid *p[3]={&ccu,&cb,&ccy};
cout<<"边长为5的正方体:"<<endl<<"体积:"<<p[0]->volume()<<"\n面积:"<<p[0]->area();
cout<<"\n\n半径为4.5的球体:"<<endl<<"体积:"<<p[1]->volume()<<"\n面积:"<<p[1]->area();
cout<<"\n\n底面半径为2,高为6.5的圆柱体:"<<endl<<"体积:"<<p[2]->volume()<<"\n面积:"<<p[2]->area();
return 0;
}