多态课堂作业

//扩展程序:创建一个三角形类
//修改create_object函数,使得程序支持三角形的创建
//和求面积、打印等操作
#include <iostream>

using namespace std;

class Shape {   
public:
 virtual double getArea() const =0;
 virtual void print() const =0;     
 virtual ~Shape(){}
};  


class triangle : public Shape {
public:
 triangle( int = 0, int = 0);    // 构造函数
 virtual double getArea() const;     // 返回面积
 void print() const;     // 输出Rectangle类对象
private:
 int d,g;
 

};


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 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;
}  
triangle::triangle( int mValue, int nValue )
{
 d=mValue;  g=mValue;}

double triangle::getArea() const
{
   cout<<"triangle类的getArea函数,面积是 ";  
   return d* g/2.0;
}  

void triangle::print() const
{
   cout << "di is "<<d<<endl;
   cout<<"heigth is"<<g<<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':
    {int mm,nn;
cout<<"请输入3角形的长和高:";
cin>>mm>>nn;
*ptr=new triangle(mm,nn);
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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值