添加一个三角类

//扩展程序:创建一个三角形类  
//修改create_object函数,使得程序支持三角形的创建  
//和求面积、打印等操作  
#include <iostream>  
#include<cmath>  
using namespace std;  
  
class Shape {             
public:  
    virtual double getArea() const =0;  
    virtual void print() const =0;                
    virtual ~Shape(){}  
};  
class triangle:public Shape  
{  
    public:  
    triangle(double =0.0,double =0.0,double =0.0);  
    virtual double getArea() const;  
    virtual void print() const;  
    virtual ~triangle(){}  
    private:  
        double x,y,z;  
};    
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;  
}     
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;  
}  
triangle::triangle(double a,double b,double c)  
{  
    x=a;  
    y=b;  
    z=c;  
}  
double triangle::getArea() const  
{  
    double s=(x+y+z)/2;  
    return sqrt(s*(s-x)*(s-y)*(s-z));  
}  
void triangle::print() const  
{  
    cout<<"triangle:x="<<x<<",y="<<y<<",z="<<z<<",Area="<<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<<"请输入三角形的三边:";  
                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);  
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值