/*
*Copyright (c) 2015,烟台大学计算机学院
*All rights reserved.
*文件名称:time.cpp
*作者:刘天恩
*完成时间:2015年5月28号
*版本号:v1.0
*问题描述:设计一个抽象类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 //正方形
{
public:
CCube(double a0):a(a0){}
virtual double area()
{
return 6*a*a;
}
virtual double volume()
{
return a*a*a;
}
private:
double a;
};
class CBall:public CSolid //球
{
public:
CBall(double r0):R(r0){}
virtual double area()
{
return 4*3.14*R*R;
}
virtual double volume()
{
return 4/3*3.14*R*R*R;
}
private:
double R;
};
class CCylinder:public CSolid
{
public:
CCylinder(double r0,double h0):r(r0),h(h0){}
virtual double area()
{
return (2*3.14*r*h+2*3.14*r*r);
}
virtual double volume()
{
return 3.14*r*r*h;
}
private:
double r;
double h;
};
int main()
{
CSolid *p;
CCube C1(3);
p=&C1;
cout<<"正方体的边长是3"<<endl;
cout<<"正方体的表面积为:";
cout<<p->area()<<endl;
cout<<"正方体的体积为:";
cout<<p->volume()<<endl<<endl;
CBall C2(3);
p=&C2;
cout<<"球体的半径是3"<<endl;
cout<<"球体的表面积为:";
cout<<p->area()<<endl;
cout<<"球体的体积为:";
cout<<p->volume()<<endl<<endl;
CCylinder C3(3,3);
p=&C3;
cout<<"圆柱体的半径是3,高是3"<<endl;
cout<<"圆柱体的表面积为:";
cout<<p->area()<<endl;
cout<<"圆柱体的体积为:";
cout<<p->volume()<<endl<<endl;
return 0;
}
运行结果:
学习心得:
当把指向成员运算符—>换做成员运算符. 会出现编译错误:求解??