14--6Shap类-----简单的继承

一般的做法,也可以说比较笨的做法。再没有学习虚函数之前,好像这样做还是挺好的

简单说就是用不同的函数名字。

 

#include <iostream>
#include<math.h>
#define pi  3.14159
using namespace std;
//一般的做法是在派生类函数中重新定义面积和周长函数
//方便区分:用不同的函数名字
class shape
{
    public:
      double area(){return 0;}
      double girth(){return 0;}
      void show()
      {
          cout<<"shape object:"<<endl;
      }
      private:

};


//圆类
class circle:public shape
{
    public:
     circle();
      double area();
      double girth();
      void show1();

      private:
       double r;
};

circle::circle()
{cout<<"输入圆形的半径:";
    cin>>r;
}
double circle::area()
{
    return pi*r*r;
}

double circle::girth()
{
    return 2*pi*r;
}
void circle::show1()
{   show();
    cout<<"圆.\n圆的半径是:"<<r<<"\n面积是:"<<area()<<"\n周长是:"<<girth()<<endl<<endl;
}
//三角形
class triangle :public shape
{
    public:
      triangle();
      double area();
      double girth();
      void show1();

      private:
      double a,b,c;
};

triangle::triangle()
{
    cout<<"输入三角形的三边长:";
    cin>>a>>b>>c;
    if(!(a+b>c&&a+c>b&&b+c>a))
    {
        cout<<"您输入三边无法组成三角形!请重新输入:";
        cin>>a>>b>>c;
    }
}

double triangle::area()
{
    double s;
    s=(a+b+c)/2;
    return sqrt(s*(s-a)*(s-b)*(s-c));
}

double triangle::girth()
{
    return a+b+c;
}

void triangle::show1()
{
    show();
    cout<<"三角形.\n三角形三边分别是:\n"<<a<<" "<<b
        <<" "<<c<<"\n面积是:"<<area()<<"\n三角形的周长是:"
        <<girth()<<endl<<endl;
}
//矩形
class rectangle:public shape
{
    public:
      rectangle();
      double area();
      double girth();
      void show1();

      private:
      double chang,kuan;
};
rectangle::rectangle()
{
    cout<<"输入矩形的长和宽:";
    cin>>chang>>kuan;
}

double rectangle::area()
{
    return chang*kuan;
}
double rectangle ::girth()
{
    return 2*(chang+kuan);
}
void rectangle::show1()
{
    show();
    cout<<"矩形.\n矩形的长和宽分别是:\n"<<chang<<" "
       <<kuan<<"\n面积是:"<<area()<<"\n矩形的周长是:"<<girth()<<endl<<endl;
}


/////////完毕/////下面是主函数/////////////////////

int main()
{
  circle c;
  triangle t;
  rectangle r;
  c.show1();
  t.show1();
  r.show1();


    return 0;
}

 

结果:

14--6Shap类-----简单的继承_第1张图片


用虚函数,简单,方便,易懂:

 

#include <iostream>
#include<math.h>
#define pi  3.14159
using namespace std;

class shape
{
public:
    //将面积和周长函数声明为纯虚函数
    virtual double area()
    {
        return 0.0;
    };
    //周长
    virtual double girth()
    {
        return 0.0;
    };
    virtual void show()
    {
        cout<<"shape object:"<<endl;
    }
private:

};


//圆类
class circle:public shape
{
public:
    circle();
    virtual double area();
    virtual double girth();
    virtual void show();

private:
    double r;
};

circle::circle()
{
    cout<<"输入圆形的半径:";
    cin>>r;
}
double circle::area()
{
    return pi*r*r;
}

double circle::girth()
{
    return 2*pi*r;
}
void circle::show()
{
    //show();
    cout<<"圆.\n圆的半径是:"<<r<<"\n面积是:"<<area()<<"\n周长是:"<<girth()<<endl<<endl;
}
//三角形
class triangle :public shape
{
public:
    triangle();
    virtual double area();
    virtual  double girth();
    virtual void show();

private:
    double a,b,c;
};

triangle::triangle()
{
    cout<<"输入三角形的三边长:";
    cin>>a>>b>>c;
    if(!(a+b>c&&a+c>b&&b+c>a))
    {
        cout<<"您输入三边无法组成三角形!请重新输入:";
        cin>>a>>b>>c;
    }
}

double triangle::area()
{
    double s;
    s=(a+b+c)/2;
    return sqrt(s*(s-a)*(s-b)*(s-c));
}

double triangle::girth()
{
    return a+b+c;
}

void triangle::show()
{
    //show();
    cout<<"三角形.\n三角形三边分别是:\n"<<a<<" "<<b
        <<" "<<c<<"\n面积是:"<<area()<<"\n三角形的周长是:"
        <<girth()<<endl<<endl;
}
//矩形
class rectangle:public shape
{
public:
    rectangle();
    virtual  double area();
    virtual  double girth();
    virtual  void show();

private:
    double chang,kuan;
};
rectangle::rectangle()
{
    cout<<"输入矩形的长和宽:";
    cin>>chang>>kuan;
}

double rectangle::area()
{
    return chang*kuan;
}
double rectangle ::girth()
{
    return 2*(chang+kuan);
}
void rectangle::show()
{
    //show();
    cout<<"矩形.\n矩形的长和宽分别是:\n"<<chang<<" "
        <<kuan<<"\n面积是:"<<area()<<"\n矩形的周长是:"<<girth()<<endl<<endl;
}


/////////完毕/////下面是主函数/////////////////////

int main()
{
    circle c;
    triangle t;
    rectangle r;
    /*
     cout<<"\n\n***************派生类对象圆点指依次输出各对象的信息***************";
    c.show();
    t.show();
    r.show();*/
    cout<<"\n\n***************用基类指依次输出各对象的信息***************\n\n";
    shape *ptr;

    ptr=&c;
    ptr->show();

    ptr=&t;
    ptr->show();

    ptr=&r;
    ptr->show();



    return 0;
}

结果:

 

14--6Shap类-----简单的继承_第2张图片

你可能感兴趣的:(14--6Shap类-----简单的继承)