C++学习日记之对象作为数据成员

来源:互联网 发布:mac上好用的邮箱软件 编辑:程序博客网 时间:2024/06/04 01:24

项目:

       本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。  提示:(1)这个问题需要用到两个类,顶点类为CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
代码如下:
#include<iostream>#include<cmath>class CPoint{private:  double x;  // 横坐标  double y;  // 纵坐标public:  CPoint(double xx=0,double yy=0);  double Distance1(CPoint p) const;   // 两点之间的距离(一点是当前点,另一点为参数p)  double Distance0() const;            // 到原点的距离  CPoint SymmetricAxis(char style) const;//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称  void input();  //以x,y 形式输入坐标点  void output(); //以(x,y) 形式输出坐标点};CPoint::CPoint(double xx,double yy){x=xx;y=yy;}double CPoint::Distance1(CPoint p) const {return sqrt((this->x-p.x)*(this->x-p.x)+(p.y-this->y)*(p.y-this->y));}double CPoint::Distance0() const{return sqrt(x*x+y*y);}CPoint CPoint::SymmetricAxis( char style) const{CPoint point;switch (style){case 'x': point.y=-y;point.x=x;return point;case 'y':point.x=-x;point.y=y;return point;case 'o':point.x=-x;point.y=-y;return point;default:std::cout << "input error!";break;}}void CPoint::input(){char ch;    std::cin >>x >>ch >>y;if(ch!=',')std::cout << "输入格式错误!";}void CPoint::output(){std::cout<<"("<<x << "," << y << ")";}class CTriangle  {  public:    CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数    void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//    float perimeter(void);//计算三角形的周长    float area(void);//计算并返回三角形的面积    bool isRightTriangle(); //是否为直角三角形    bool isIsoscelesTriangle(); //是否为等腰三角形  private:    CPoint A,B,C; //三顶点  };  void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){A=X;B=Y;C=Z;}float CTriangle::perimeter(){return (A.Distance1(B)+A.Distance1(C)+B.Distance1(C));}float CTriangle::area(){  double a=B.Distance1(C),b=C.Distance1(A),c=A.Distance1(B);    double s = (a + b + c) / 2;    return sqrt(s * (s - a) * (s - b) * (s - c));  }bool CTriangle::isRightTriangle(){double a=C.Distance1(B),b=A.Distance1(C),c=A.Distance1(B);double max=a;if(b>max) max=b;if(c>max) max=c;if((max==a)&&(abs(a*a-b*b-c*c)<1e-7)||(max==b)&&(b*b-a*a-c*c)<1e-7||(max==c)&&(c*c-b*b-a*a))return true;elsereturn false;}bool CTriangle::isIsoscelesTriangle(){double a=C.Distance1(B),b=A.Distance1(C),c=A.Distance1(B);if(abs(a-b)<1e-7||abs(b-c)<1e-7||abs(a-c)<1e-7)return true;else return false;}int main(){CPoint X(1,0),Y(5,0),Z(1,8);      CTriangle Tri1(X,Y,Z);  //定义三角形类的一个实例(对象)      std::cout<<"该三角形的周长为:"<<Tri1.perimeter()<<",面积为:"<<Tri1.area()<<std::endl<<std::endl;      std::cout<<"该三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<std::endl;      std::cout<<"该三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<std::endl;      return 0;  }


运行结果如下:
0 0