第五周 项目二 对象作为数据对象

来源:互联网 发布:淘宝卖包包货源 编辑:程序博客网 时间:2024/06/05 02:58
#include <iostream>  #include <cmath>  using namespace std;  class CPoint  {  private:      double x;  // 横坐标      double y;  // 纵坐标  public:      CPoint(double xx=0,double yy=0):x(xx),y(yy) {};      double Distance1(CPoint p) const //两点之间的距离(一点是当前点——想到this了吗?,另一点为p)      {          return sqrt(((*this).x-p.x)*((*this).x-p.x)+((*this).y-p.y)*((*this).y-p.y));      }      double Distance0() const          // 到原点(0,0)的距离      {          return sqrt(x*x+y*y);      }      CPoint SymmetricAxis(char style) const//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称      {          CPoint p(this->x,this->y);          switch(style)          {          case 'x':              p.y=-y;              break;          case 'y':              p.x=-x;              break;          case 'o':              p.x=-x;              p.y=-y;              break;          }          return p;      }      void input()  //以x,y 形式输入坐标点      {          char ch;          cout<<"please input data as'x,y': "<<endl;          cin>>x>>ch>>y;          if(ch!=',')              cout<<"error!"<<endl;      }      void output() //以(x,y) 形式输出坐标点      {          cout<<"("<<x<<","<<y<<")"<<endl;      }  };  class CTriangle  {  public:      CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z) {} //给出三点的构造函数        void setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//      {          A=X;          B=Y;          C=Z;          double a,b,c;          a=B.Distance1(C);          b=A.Distance1(C);          c=A.Distance1(B);          if(!(a<b+c&&b<a+c&&c<a+b))              cout<<"该三点无法组成三角形"<<endl;      }      float perimeter(void)//计算三角形的周长      {          return B.Distance1(C)+A.Distance1(C)+A.Distance1(B);      }      float area(void)//计算并返回三角形的面积      {          double a,b,c,p;          a=B.Distance1(C);          b=A.Distance1(C);          c=A.Distance1(B);          p=(a+b+c)/2;          return sqrt(p*(p-a)*(p-b)*(p-c));      }      bool isRightTriangle()//是否为直角三角形      {          double a,b,c;          a=B.Distance1(C);          b=A.Distance1(C);          c=A.Distance1(B);          if(area()==a*b/2||area()==c*b/2||area()==a*c/2)              return true;          else              return false;      }      bool isIsoscelesTriangle() //是否为等腰三角形      {          double a,b,c;          a=B.Distance1(C);          b=A.Distance1(C);          c=A.Distance1(B);          if(a==b||b==c||c==a)              return true;          else              return false;      }  private:      CPoint A,B,C; //三顶点  };  int main()  {      CPoint c1(0,0),c2(0,3),c3(4,0);      CTriangle triangle(c1,c2,c3);      cout<<"三角形三点的坐标分别为:"<<endl;      c1.output();      c2.output();      c3.output();      cout<<"该三角形的周长:"<<triangle.perimeter()<<endl;      cout<<"该三角形的面积:"<<triangle.area()<<endl;      cout<<"该三角形"<<(triangle.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;      cout<<"该三角形"<<(triangle.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;      return 0;  }  

0 0
原创粉丝点击