问题及代码:
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Project4.cpp
* 作 者:陈旭
* 完成日期:2015年6月10日
* 版 本 号:v1.0
*
* 问题描述: 设计一个抽象类,含有用于求表面积及体积的两个纯虚函数
* 输入描述:略
* 程序输出:略
*/
#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double area()=0;
virtual double volume()=0;
virtual void show()=0;
};
class CCube: public CSolid
{
private:
double length,width,high;
public:
CCube(double l=0,double w=0,double h=0):length(l),width(w),high(h) {}
double area();
double volume();
void show();
};
double CCube::area()
{
return 2*length*width+2*length*high+2*width*high;
}
double CCube::volume()
{
return length*width*high;
}
void CCube::show()
{
cout<<"这个正方体的表面积为:"<<area()<<", 体积为:"<<volume()<<endl;
}
class CBall:public CSolid
{
private:
double r;
public:
CBall(double a):r(a){}
double area();
double volume();
void show();
};
double CBall::area()
{
double pi=3.14159;
return 4*pi*r*r;
}
double CBall::volume()
{
double pi=3.14159;
return (4*pi*r*r*r)/3;
}
void CBall::show()
{
cout<<"这个球体的表面积为:"<<area()<<", 体积为:"<<volume()<<endl;
}
class CCylinder :public CSolid
{
private:
double r;
double high;
public:
CCylinder(double a,double h):r(a),high(h) {}
double area();
double volume();
void show();
};
double CCylinder::area()
{
double pi=3.14159;
return 2*pi*r*high+2*pi*r*r;
}
double CCylinder::volume()
{
double pi=3.14159;
return pi*r*r*high;
}
void CCylinder::show()
{
cout<<"这个圆柱体的表面积为:"<<area()<<", 体积为:"<<volume()<<endl;
}
int main()
{
CCube cc(4.5,3.8,6.1);
CBall cb(5.0);
CCylinder ccy(4.2,6.5);
CSolid *p;
p=&cc;
p->show();
p=&cb;
p->show();
p=&ccy;
p->show();
return 0;
}
运行结果: