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