/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2012, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 抽象类
* 作 者: 苗影
* 完成日期: 2012 年 5 月 15日
* 版 本 号: x1.0
* 对任务及求解方法的描述部分
* 输入描述: 使用抽象类
* 问题描述: 【任务4】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。
设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
* 程序输出: ......
* 程序头部的注释结束
*/
#include<iostream>
using namespace std;
class CSolid
{
public:
virtual double area()const=0;
virtual double volume()const=0;
};
class CCube:public CSolid
{
public:
CCube(double r=0.0);
virtual double area()const;
virtual double volume()const;
protected:
double radius;
};
CCube::CCube(double r)
{
radius=r;
}
double CCube::area() const{return 6*radius*radius;}
double CCube::volume() const{return radius*radius*radius;}
class CBall:public CSolid
{
public:
CBall(double h=0);
virtual double area()const;
virtual double volume()const;
protected:
double heigh;
};
CBall::CBall(double h):heigh(h){}
double CBall::volume()const
{
return ((3.14159*3*heigh*heigh*heigh)/4);
}
double CBall::area() const{return 4*3.14159*heigh*heigh;}
class CCylinder:public CSolid
{
public:
CCylinder(double d=0,double m=0);
virtual double area()const;
virtual double volume()const;
protected:
double di;
double ma;
};
CCylinder::CCylinder(double d,double m):di(d),ma(m){}
double CCylinder::area()const
{
return (2 * 3.14159 * di * di + 2 * 3.14159 * di* ma);
}
double CCylinder::volume()const
{
return(3.14159 * di * di* ma);
}
int main()
{
CCube ccube(2);
CBall cball(3);
CCylinder ccylinder(4,6);
CSolid*p;
p=&ccube;
cout<<"正方体的表面积是:"<<p->area ()<<"\n"<<"正方体的体积是"<<p->volume ()<<"\n";
p=&cball;
cout<<"球体的表面积是:"<<p->area ()<<"\n"<<"球体的体积是"<<p->volume ()<<"\n";
p=&ccylinder;
cout<<"圆柱体的表面积是:"<<p->area ()<<"\n"<<"圆柱体的体积是"<<p->volume ()<<"\n";
system("pause");
return 0;
}
运行结果:
正方体的表面积是:24
正方体的体积是8
球体的表面积是:113.097
球体的体积是63.6172
圆柱体的表面积是:251.327
圆柱体的体积是301.593
请按任意键继续. . .
感言:很快完成了任务,真好!!要是每次都这样多好