/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 第十三周任务四纯虚函数与继承
* 作 者: 石丽君
* 完成日期: 2012 年 5 月 14 日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述: 设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。
设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream>
#define pi 3.1415
using namespace std;
class CSolid
{
public:
virtual double area() =0;
virtual double volume() =0;
};
class CCube:public CSolid
{
public:
virtual double area();
virtual double volume();
virtual double getl() {return longth;}
double getw() {return wigth;}
double geth() {return higth;}
CCube(double l,double w,double h):longth(l),wigth(w),higth(h) {}
private:
double longth;
double wigth;
double higth;
};
double CCube::area()
{
return 2*(longth*wigth*higth);
}
double CCube::volume()
{
return longth*wigth*higth;
}
class CBall :public CSolid
{
public:
double area();
double volume();
virtual double getr() {return R;}
CBall(double r):R(r) {}
private:
double R;
};
double CBall::area()
{
return 4*pi*R*R;
}
double CBall::volume()
{
return (4/3*pi*R*R*R);
}
class CCylinder:public CSolid
{
public:
double area();
double volume();
virtual double getr() {return R;}
virtual double geth() {return higth;}
CCylinder(double r,double h):R(r),higth(h) {}
private:
double R;
double higth;
};
double CCylinder::area()
{
return (2*pi*R*R+2*pi*R*higth);
}
double CCylinder::volume()
{
return pi*R*R*higth;
}
int main()
{
CSolid *p;
CCube c1( 2,1,3);
p=&c1;
p->area();
p->volume();
cout<<"正方体的长"<<c1.getl()<<"宽"<<c1.getw()<<"高"<<c1.geth()<<endl;
cout<<"正方体的面积"<<p->area()<<"体积为"<<p->volume()<<endl;
CBall b(2.2);
p=&b;
cout<<"球体的半径为"<<b.getr()<<endl;
cout<<"球体的面积"<<p->area()<<"体积为 "<<p->volume()<<endl;
CCylinder y(3,2);
p=&y;
cout<<"圆柱体的半径"<<y.getr()<<"高为 "<<y.geth()<<endl;
cout<<"圆柱体的面积"<<p->area()<<"体积为 "<<p->volume()<<endl;
return 0;
}
第十三周任务四纯虚函数与继承
最新推荐文章于 2023-03-24 02:37:58 发布