13週目-タスク4-抽象クラスCSolidおよび派生クラスCCube、CBall、CCylinder


【タイトル】表面積と体積を求める2つの純粋な虚関数を含む抽象クラスCSolidを設計する.派生クラスCCube、CBall、CCylinderを設計し、それぞれ正方体、球体および円柱を表す.main()関数では、ベースクラスのポインタp(CSolid*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=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;
	system("pause");
	return 0;
}