天天看点

《C++第十三周实验报告4-1》---设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。 设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。...

/*
【任务4】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。
设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
*/
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:  CSolid.cpp                            
* 作    者:   计114-3 王兴锋     
* 完成日期:    2012  年   5    月    15    日
* 版 本 号:       V 1.0
*/
#include <iostream>

using namespace std;

#define PI 3.1415926
//抽象类
class CSolid
{
public:
	virtual double area() {return 0.0;}
	virtual double getV() {return 0.0;}
};
//定义正方体类
class CCube : public CSolid
{
private:
	double l;
public:
	CCube(double l){this->l = l;}
	double area(){return 6*l*l;}
	double getV() {return l*l*l;}
};
//定义球体类
class CBall : public CSolid
{
private:
	double r;
public:
	CBall(double r){this->r = r;}
	double area(){return 4*PI*r*r;}
	double getV() {return 4*PI*r*r*r/3;}
};
//定义圆柱体类
class CCylinder : public CSolid
{
private:
	double r, h;
public:
	CCylinder(double r, double h){this->r = r, this->h = h;}
	double area(){return (2*PI*r*r + 2*PI*r*r * h);}
	double getV() {return h*PI*r*r;}
};
void show(CSolid *p);
int main()
{
	//定义各类对象
	CCube cc(12.6);   
	CBall cb(4.5);
	CCylinder ccy(4.5, 8.4);
	
	cout << "CCube cc(12.6)" << endl;
	show(&cc);
	cout << "CBall cb(4.5);" << endl;
	show(&cb);
	cout << "CCylinder ccy(4.5, 8.4);" << endl;
	show(&ccy);

	system("pause");
	return 0;
}
//定义输出函数
void show(CSolid *p)
{
	cout << "表面积:" << p->area() << endl;
	cout << "体积:" << p->getV() << endl;
}
/*
CCube cc(12.6)
表面积:952.56
体积:2000.38
CBall cb(4.5);
表面积:254.469
体积:381.704
CCylinder ccy(4.5, 8.4);
表面积:1196
体积:534.385
请按任意键继续. . .
*/