1. 程式人生 > >《C++第十三週實驗報告4-1》---設計一個抽象類CSolid,含有兩個求表面積及體積的純虛擬函式。 設計個派生類CCube、CBall、CCylinder,分別表示正方體、球體及圓柱體。...

《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
請按任意鍵繼續. . .
*/