1. 程式人生 > >C++實踐參考——立體類族共有的抽象類

C++實踐參考——立體類族共有的抽象類

【專案-立體類族共有的抽象類】
    設計一個抽象類CSolid,含有用於求表面積及體積的兩個純虛擬函式。設計派生類CCube、CBall、CCylinder,分別表示正方體、球體及圓柱體。在main()函式中,定義CSolid *p;(p是指向基類的指標,且這個基類是個抽象類)。要求利用這個p指標,能夠求出正方體、球體及圓柱體物件的表面積及體積。

[參考解答]

#include "iostream"
using namespace std;

const double pai=3.1415926;
// 抽象立體圖形基類
class CSolid
{
public:
	virtual double SurfaceArea() const=0;
	virtual double Volume() const=0;
};

// 立方體類
class CCube : public CSolid
{
public:
	CCube(double len=0);
	double SurfaceArea() const;   // 求表面積
	double Volume() const;        // 求體積
private:
	double length;

};

// 立方體類建構函式
CCube::CCube(double len)
{
	length=len;
}

// 求立方體表面積
double CCube::SurfaceArea() const
{
	double c;
	c=6*length*length;
	return c;
}

// 求立方體體積
double CCube::Volume() const
{
	double c;
	c=length*length*length;
	return c;
}

// 球體類
class CBall : public CSolid
{
private:
	double radius;            // 圓周率
public:
	CBall(double r=0);
	double SurfaceArea() const;  // 求表面積
	double Volume() const;       // 求體積;
};

// 球體類建構函式
CBall::CBall(double r)
{
	radius=r;
}

// 求球體表面積
double CBall::SurfaceArea() const
{
	double c;
	c=4*pai*radius*radius;
	return c;
}

// 求球體體積
double CBall::Volume() const
{
	double c;
	c=pai*radius*radius*radius*4/3;
	return c;
}

// 圓柱體類
class CCylinder : public CSolid
{
private:
		double radius;
	double height;
public:
	CCylinder(double r=0,double high=0);
	double SurfaceArea() const;       // 求表面積
	double Volume() const;            // 求體積
};

// 圓柱體類建構函式
CCylinder::CCylinder(double r,double high)
{
	radius=r;
	height=high;
}

// 求圓柱體表面積
double CCylinder::SurfaceArea() const
{
	double c;
	c=2*pai*radius*radius+2*pai*radius*height;
	return c;
}

// 求圓柱體體積
double CCylinder::Volume() const
{
	double c;
	c=pai*radius*radius*height;
	return c;
}

int main( )
{
	CSolid *p;
	double s,v;
	CCube x(30);
	cout<<"立方體邊長為 30 "<<endl;
	p=&x;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面積:"<<s<<endl;
	cout<<"體積:"<<v<<endl;
	cout<<endl;
	CBall y(4.5);
	cout<<"球體半徑為 4.5 "<<endl;
	p=&y;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面積:"<<s<<endl;
	cout<<"體積:"<<v<<endl;
	cout<<endl;
	CCylinder z(10,20);
	cout<<"圓柱體底面半徑、高分別為 10, 20"<<endl;
	p=&z;
	s=p->SurfaceArea( );
	v=p->Volume( );
	cout<<"表面積:"<<s<<endl;
	cout<<"體積:"<<v<<endl;
	cout<<endl;
	return 0;
}