Unit6--problem3--二类共享

来源:互联网 发布:ug nx11编程新功能 编辑:程序博客网 时间:2024/06/18 12:41
/*Univercity:烟台大学*@Class</A>计134~4*@Author:薛富磊*@Time:2014-4-2*@Function:回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类.通过这种方式,将某些类组合到另外的类中,当作其中的一个“部件”使用。本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。*@Args::(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;         (2)三角形类参考下面CTriangle类的声明;         (3)充分利用CPoint类中已有的代码实现;         (4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。*@Return:*/#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;   // 两点之间的距离(一点是当前点,另一点为参数p)  void input();  //以x,y 形式输入坐标点  void output(); //以(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; //三顶点};double CPoint::Distance1(CPoint p) const{    return(sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)));}void CPoint::input(){    char a,c,e;    //double b,d;    cout<<"输入点的坐标例如(7,7):";    while(1)    {        cin>>a>>x>>c>>y>>e;        if(a!='('||c!=','||e!=')')        {            cout<<"重新输入例如(7,7):";            input();break;        }        else break;    }}void CPoint::output(){    cout<<"("<<x<<","<<y<<")"<<endl;}void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){    A=X;    B=Y;    C=Z;}float CTriangle::perimeter(void){    double a,b,c;    a=A.Distance1(B);    b=B.Distance1(C);    c=A.Distance1(C);    return (a+b+c);}float CTriangle::area(void){    double a,b,c,q;    a=A.Distance1(B);    b=B.Distance1(C);    c=A.Distance1(C);    q=(a+b+c)/2;    return sqrt(q*(q-a)*(q-b)*(q-c));}bool CTriangle::isRightTriangle(){    double a,b,c;    a=A.Distance1(B);    b=B.Distance1(C);    c=A.Distance1(C);    if(a*a!=b*b+c*c||b*b!=a*a+c*c||c*c!=b*b+a*a)    return true;    else    return false;}bool CTriangle::isIsoscelesTriangle(){    double a,b,c;    a=A.Distance1(B);    b=B.Distance1(C);    c=A.Distance1(C);    if(a==b||a==c||b==c)    return true;    else    return false;}int main(){    CPoint a,b,c;    cout<<"请输入三点坐标:";    a.input();    b.input();    c.input();    cout<<"坐标为:";    a.output();    b.output();    c.output();    CTriangle t(a,b,c);    cout<<"三角形的周长:"<<t.perimeter()<<" "<<"面积:"<<t.area()<<endl;    cout<<"该三角形:";    if(t.isRightTriangle())    cout<<"是直角三角形 "<<endl;    else    cout<<"不是直角三角形 "<<endl;    if(t.isIsoscelesTriangle())    cout<<"         是等腰三角形"<<endl;    else    cout<<"         不是等腰三角形"<<endl;    return 0;}/*心得体会:           设的bool类型           但写的过程中           忘啦!!!!           尽管结果不错           但是。。。。。。*/

0 0
原创粉丝点击