C++第4周项目3 - 多文件组织程序

来源:互联网 发布:linux下好用的输入法 编辑:程序博客网 时间:2024/04/28 05:41

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8690895


【项目3 - 程序的多文件组织】当程序规模变大后,一个程序用多个文件组织,便于组织生产。这样,不必每次都重复对所有代码进行编译,而只需编译一次即可。把编译后所形成的目标文件保存起来,以后在需要时把它调出来直接与程序的目标文件相连接即可。

  C++中一种常用的做法是,独立出一个头文件来。正确使用头文件带来的好处包括:支持代码的局部单独编译,尤其对类及成员函数声明;保证所有文件使用给定实体的同一声明;当声明需要修改时,只有头文件需要更新。使用头文件的时候,头文件只用于声明,而不是定义,头文件一般含有支持分别编译所需的类定义及变量和函数的声明。另外,一些const对象要定义在头文件中。类的成员函数定义在头文件中只有一个例外,那就是内置(inline)成员函数需要定义在头文件中。
  下面是本项目的要求:
  利用多文件组织,完成项目2。其中,项目包括3个文件:
主文件: main.cpp,用于定义main()函数
头文件: triangle.h,头文件
类定义文件: triangle.cpp,用于定义类Triangle
  注意,3个set函数和3个get函数是内置成员函数,其他函数不作为内置函数。


参考解答(在看参考解答时,注意每个文件中#include部分的写法):
头文件Triangle.h

class Triangle{public:void setA(double x){a=x;};  //内置函数要定义在头文件中void setB(double y){b=y;};void setC(double z){c=z;};double getA(){return a;}double getB(){return b;}double getC(){return c;}bool isTriangle();//判断是否构成三角形double perimeter(void);//计算三角形的周长double area(void);//计算并返回三角形的面积private:double a,b,c; //三边为私有成员数据};

头文件Triangle.h还可以如下所示

class Triangle{public:inline void setA(double x);  //内置函数在类内声明inline void setB(double y);inline void setC(double z);inline double getA();inline double getB();inline double getC();bool isTriangle();//判断是否构成三角形double perimeter(void);//计算三角形的周长double area(void);//计算并返回三角形的面积private:double a,b,c; //三边为私有成员数据};inline void Triangle::setA(double x){a=x;};  //内置函数在类外定义,但一定在头文件中inline void Triangle::setB(double y){b=y;};inline void Triangle::setC(double z){c=z;};inline double Triangle::getA(){return a;}inline double Triangle::getB(){return b;}inline double Triangle::getC(){return c;}

用于定义类的triangle.cpp

#include "Triangle.h"#include <Cmath>bool Triangle::isTriangle(){return (a+b>c&&a+c>b&&b+c>a);}double Triangle::perimeter(){return a+b+c;}double Triangle::area(){double p=(a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));}

用于写测试程序的main.cpp

#include<iostream>#include "Triangle.h"using namespace std;int main(){Triangle tri1;//定义三角形类的一个实例(对象)double x,y,z;cout<<"请输入三角形的三边:";cin>>x>>y>>z;tri1.setA(x);tri1.setB(y);tri1.setC(z);//为三边置初值if(tri1.isTriangle()){ cout<<"三条边为:"<<tri1.getA()<<','<<tri1.getB()<<','<<tri1.getC()<<endl;cout<<"三角形的周长为:"<< tri1.perimeter()<<'\t'<<"面积为:"<< tri1.area()<<endl;}elsecout<<"不能构成三角形"<<endl;system("pause");return 0;}