5.19晚课堂作业

//扩展程序:创建一个三角形类

//修改create_object函数,使得程序支持三角形的创建

//和求面积、打印等操作

#include <iostream>

#include <math.h>

using namespace std;

 

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 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;

}   // ShapegetArea函数的定义

 

void Shape::print() const

{

cout<<"Base class Object"<<endl;

} //Shapeprint函数定义

 

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;

}  // CirclegetArea函数定义

void Circle::print() const

{

   cout << "center is ";

   cout<<"x="<<x<<"   y="<<y;

   cout << "; radius is " << radius<<endl;

}  // Circleprint函数定义

Rectangle::Rectangle( int aValue, int bValue )

{

a=aValue;  b=bValue;

}  // Rectangle类构造函数

double Rectangle::getArea() const

{

   cout<<"Rectangle类的getArea函数,面积是 ";   

   return a * b;

}        // RectanglegetArea函数定义

void Rectangle::print() const

{

   cout << "hight is "<<a;

   cout<<"width is"<<b<<endl;

 

class sjx : public Rectangle

{

public:

sjx(double = 0,double = 0,double = 0);

virtual double getArea() const;

void printf() const;

protected:

double a,b,c;

};

sjx::sjx(double aa,double bb,double cc)

{

a=aa;b=bb;c=cc;

}

double sjx::getArea() const

{

   cout<<"sjx类的getArea函数,面积是 ";   

   double p;

   p=(a+b+c)/2;

   return sqrt(p*(p-a)*(p-b)*(p-c));

}

void sjx::printf() const

{

cout<<"a="<<a<<",length="<<b

<<",width="<<c<<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类对象;s:sjx类对象"<<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 's':

  {

  double aa,bb,cc;

  cout<<"请输入三角形的三条边:";

  cin>>aa>>bb>>cc;

  *ptr = new sjx(aa,bb,cc);

  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、付费专栏及课程。

余额充值