2015-第5周项目3-用多文件组织多个类的程序

来源:互联网 发布:莎布 尼古拉斯trpg数据 编辑:程序博客网 时间:2024/05/18 01:57
【项目3-用多文件组织多个类的程序】

将项目2用“一个项目多个文件”的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。



main.cpp:

#include <iostream>#include <cmath>#include "trangle.h"using namespace std;//输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。int main(){    CPoint X,Y,Z;    X.input();    Y.input();    Z.input();    CTriangle Tri1(X,Y,Z);    cout<<"周长:"<<Tri1.perimeter()<<endl<<"面积:"<<Tri1.area()<<endl;    cout<<"该三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;    cout<<"该三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;    return 0;}

trangle.cpp:

#include <iostream>#include <cmath>#include "trangle.h"using namespace std;double CPoint::distance(CPoint p) const{    double a;    a=(x-p.x)*(x-p.x)+(y-p.y)*(y-p.y);    return sqrt(a);}CPoint::CPoint(double xx,double yy){    x=xx;    y=yy;}void CPoint::input(){    char a;    cout<<"请输入点坐标(格式x,y):\n";    while(1)    {        cin>>x>>a>>y;        if(a==',')            break;        else            cout<<"Input error!Please try again.";    }}void CPoint::output(){    cout<<"("<<x<<','<<y<<")";}void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){    A=X;    B=Y;    C=Z;}float CTriangle::perimeter(){    double s;    s=C.distance(A)+B.distance(A)+C.distance(B);    return s;}float CTriangle::area(){    double a,b,c;    b=C.distance(A);    c=B.distance(A);    class CPoint    {    private:        double x;        double y;    public:        CPoint(double xx=0,double yy=0);        double distance(CPoint p) const;        void input();        void output();    };    a=C.distance(B);    double s=(a+b+c)/2;    return sqrt(s*(s-a)*(s-b)*(s-c));}bool CTriangle::isRightTriangle(){    double a,b,c,t;    b=C.distance(A);    c=B.distance(A);    a=C.distance(B);    if (a<b)    {        t=a;        a=b;        b=t;    }    if (a<c)    {        t=c;        c=a;        a=t;    }    if (b<c)    {        t=b;        b=c;        c=t;    }    if (abs(a*a-b*b-c*c)<1e-7)        return true;    else        return false;}bool CTriangle::isIsoscelesTriangle(){    double a,b,c;    b=C.distance(A);    c=B.distance(A);    a=C.distance(B);    if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))        return true;    else        return false;}


trangle.h:

#ifndef TRANGLE_H_INCLUDED#define TRANGLE_H_INCLUDEDclass CPoint{private:    double x;    double y;public:    CPoint(double xx=0,double yy=0);    double distance(CPoint p) const;    void input();    void output();};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; //三顶点};#endif // TRANGLE_H_INCLUDED



0 0