/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称: 立体类族共有的抽象类
*作者:刘中林
*完成日期:2014 年 5 月 27 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*问题描述:设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。
设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。
要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
*输入描述:无。
*程序输出:正方体,球体,圆柱体面积及体积
*问题分析:
*算法设计:
*/
#include <iostream>
using namespace std;
const double s=3.14;
class CSolid
{
public:
virtual float area() =0;
virtual float volume() =0;
virtual void shape() =0;
};
class CCube:public CSolid
{
public:
CCube(float l):length(l) {}
float get_l()
{
return length;
}
virtual float area()
{
return (length*length*6);
}
virtual float volume()
{
return (length*length*length);
}
virtual void shape()
{
cout<<"CCube:"<<endl;
}
friend ostream &operator<<(ostream&,CCube&);
protected:
float length;
};
ostream &operator<<(ostream &output,CCube &c)
{
output<<"边长l="<<c.length;
return output;
}
class CBall:public CSolid
{
public:
float get_r()
{
return R;
}
CBall(float r):R(r) {}
virtual float area()
{
return (4*s*R*R);
}
virtual float volume()
{
return (4/3*s*R*R*R);
}
virtual void shape()
{
cout<<"CBall:"<<endl;
}
friend ostream &operator<<(ostream&,CBall&);
protected:
float R;
};
ostream &operator<<(ostream &output,CBall &c)
{
output<<"半径R="<<c.get_r();
return output;
}
class CCylinder:public CBall
{
public:
float get_h()
{
return hight;
}
CCylinder(float r,float h):CBall(r),hight(h) {}
virtual float area()
{
return (s*R*R*2+2*s*R*hight);
}
virtual float volume()
{
return (s*R*R*hight);
}
virtual void shape()
{
cout<<"CCylinder:"<<endl;
}
friend ostream &operator<<(ostream&,CCylinder&);
protected:
float hight;
};
ostream &operator<<(ostream &output,CCylinder &c)
{
output<<"底面半径R="<<c.get_r()<<"高h="<<c.get_h();
return output;
}
int main()
{
CCube c1(2.5);
CBall c2(2.5);
CCylinder c3(2.5,1);
c1.shape();
cout<<c1<<endl;
c2.shape();
cout<<c2<<endl;
c3.shape();
cout<<c3<<endl<<endl;
CSolid *p;
p=&c1;
p->shape();
cout<<"area:"<<c1.area()<<endl;
cout<<"volume:"<<c1.volume()<<endl;
cout<<endl;
p=&c2;
p->shape();
cout<<"area:"<<c2.area()<<endl;
cout<<"volume:"<<c2.volume()<<endl;
cout<<endl;
p=&c3;
p->shape();
cout<<"area:"<<c3.area()<<endl;
cout<<"volume:"<<c3.volume()<<endl;
return 0;
}
*样例输出:
*心得体会:小伙子不错嘛。。