扩展三角形类求面积和打印

//扩展程序:创建一个三角形类
//修改create_object函数,使得程序支持三角形的创建
//和求面积、打印等操作
#include <iostream>
#include<math.h>
using namespace std;
#define OK 1
#define ERROR -1
class Shape {			
public:
	virtual double getArea() const =0;
	virtual void print() const =0;  			
	virtual ~Shape(){}
}; 	
class Circle : public Shape {		
public:
	Circle( int = 0, int = 0, double = 0.0 );
	
	virtual double getArea() const;   		// 返回面积
	virtual void print() const;  		// 输出Circle 类对象t

private: 
	int x,y;        				// 圆心座标
	double radius;  				// 圆半径
}; 						// 派生类Circle定义结束
class Triangle:public Shape{
public:
	Triangle( double x=0.0, double y= 0.0, double z = 0.0):firstside(x),secondside(y),thirdside(z){};
	virtual int create() const;//创建三角形 
	virtual double getArea() const;   		// 返回面积
	virtual void print() const;  		// 输出Triangle类对象t
private: 
	double firstside,secondside,thirdside;
	
}; 						// 派生类Triangle定义结束
int Triangle::create() const//创建三角形
{
	if(((firstside+secondside)>thirdside)||((firstside+thirdside)>secondside))
	{	cout<<"创建成功"<<endl;
		return OK;
	}
	else 
	{
		cout<<"ERROR"<<endl;
		return ERROR;
	}	
}
double Triangle::getArea() const//求面积
{
	double p=(firstside+secondside+thirdside)/2;
	double area=sqrt(p*(p-firstside)*(p-secondside)*(p-thirdside));
	cout<<"Triangle类的getarea函数,面积是"<<endl;	
	return area;
}
void Triangle::print() const//打印
{
	double p=(firstside+secondside+thirdside)/2;
	double area=sqrt(p*(p-firstside)*(p-secondside)*(p-thirdside));
	cout<<"Triangle类的getarea函数,面积是"<<area<<endl;
}
class Rectangle : public Shape {	
public:
	Rectangle( int = 0, int = 0);  		// 构造函数
	virtual double getArea() const;   		// 返回面积
	void print() const;  			// 输出Rectangle类对象
protected:
	int a,b;       				// 矩形的长和宽
}; 				// 派生类
double Shape::getArea() const
{
    cout<<"基类的getArea函数,面积是 ";   
return 0.0;
}  						// Shape类getArea函数的定义

void Shape::print() const
{
	cout<<"Base class Object"<<endl;
}						//Shape类print函数定义

Circle::Circle( int xValue, int yValue, double radiusValue )
{
	x=xValue;  y=yValue;
	radius= radiusValue ;
} 						// Circle类构造函数
double Circle::getArea() const
{
   cout<<"Circle类的getArea函数,面积是 ";   
   return 3.14159 * radius * radius;
} 						// Circle类getArea函数定义
void Circle::print() const
{
   cout << "center is ";
   cout<<"x="<<x<<"   y="<<y;
   cout << "; radius is " << radius<<endl;
} 						// Circle类print函数定义
Rectangle::Rectangle( int aValue, int bValue )
{
	a=aValue;  b=bValue;
} 						// Rectangle类构造函数
double Rectangle::getArea() const
{
   cout<<"Rectangle类的getArea函数,面积是 ";   
   return a * b;
} 					      // Rectangle类getArea函数定义
void Rectangle::print() const
{
   cout << "hight is "<<a;
   cout<<"width is"<<b<<endl;
} 	
class Cube : public Rectangle {		//派生类Cube的定义
public:
	Cube(int x=0, int y=0, int z=0):Rectangle(x,y),c(z){};
	double getArea() const;
	void print() const; 
private:
	int c;
}; 
double Cube::getArea() const
{return a*b*c;}

void Cube::print() const
{
	cout<<"Cube:h="<<c<<",length="<<a
	<<",width="<<b<<",Area="<<a*b*c<<endl;
}

void creat_object(Shape **ptr);
void display_area(Shape *ptr);
void delete_object(Shape *ptr);


int main()
{
   Shape *shape_ptr;
   creat_object(&shape_ptr);
   display_area(shape_ptr);
   delete_object(shape_ptr);
   return 0;
}
void creat_object(Shape **ptr)
{	char type;
	*ptr = NULL;			//空指针
	do{
	   cout<<"创建对象。请选择:";
	   cout<<"c:Circle类对象;r:Rectangle类对象;u:Cube类对象;t:Triangle类对象"<<endl;
	   cin>>type;
       switch (type)
	   {case 'c':			//创建Ciecle类对象
		{int xx,yy;
		 double rr;
		 cout<<"请输入圆心的座标和圆的半径:";
		 cin>>xx>>yy>>rr;
		 *ptr = new Circle(xx,yy,rr);
		 break;
		}
	  case 'r':			//创建Rectangle类对象 
		{int aa,bb;
		 cout<<"请输入矩形的长和宽:";
		 cin>>aa>>bb;
		 *ptr = new Rectangle(aa,bb);
		 break;
		}
	  case 'u':			//创建Cube类对象 
		{int aa,bb,cc;
		 cout<<"请输入立方体的长、宽、高:";
		 cin>>aa>>bb>>cc;
		 *ptr = new Cube(aa,bb,cc);
		 break;
		}
	  case 't':
		  {
			  double a,b,c;
			  cout<<"请输入三角形的三条边"<<endl;
			  cin>>a>>b>>c;
			  *ptr=new Triangle(a,b,c);
			  break;
		  }
	    default:cout<<"类型错误,请重新选择\n";
	   }
	   }while(*ptr==NULL);
} 

void display_area(Shape *ptr)
{   cout<<"显示所创建对象的面积和所调用的函数"<<endl;
    cout<<ptr->getArea() << endl;   
}

void delete_object(Shape *ptr)
{	delete(ptr);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值