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

课程首页地址: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;
	}
	else
		cout<<"不能构成三角形"<<endl;
	system("pause");
	return 0;
}
时间: 2024-07-29 07:46:29

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

C++第13周项目4——多文件组织回文、素数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目4-多文件程序组织] 按<C++程序设计题解与上机指导>P226第15.4节的提示,建立一个包含多个文件的项目,将第12周"项目4-回文.素数"中所做工作用多文件组织起来.其中,main()函数保存在一个文件中,所有自定义函数保存到另外一个文件中,运行程序并得到正确的结果,体会在实际的工程项目中(有很多的函数)这样组织程序的好处. 参考解答 (

C++第6周项目5 - 多文件组织三角形类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8748730 [项目5]将项目4用"一个项目多个文件"的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件.体会这样安排的优点. 参考代码: Geometry.h #ifndef GEOMETRY_

2013级C++第12周项目——函数应用

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-当年第几天] 定义一个函数,其参数为年.月.日的值,返回这一天为该年的第几天.要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果. [项目2-太乐了]先听故事,再编程序. 故事是这样的:话说sin和cos是一对夫妇.一天,sin去听相声了,cos在家.过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数.cos问:你是谁啊?

2015级C++第7周项目 友元、共享数据保护、多文件结构

[项目1-成员函数.友元函数和一般函数有区别]参考解答 (1)阅读下面的程序,体会注释中的说明(要运行程序,请找到课程主页并复制代码) //例:使用成员函数.友元函数和一般函数的区别 #include <iostream> using namespace std; class Time { public: Time(int h,int m,int s):hour(h),minute(m),sec(s) {} void display1(); //display1是成员函数 friend voi

2014秋C++ 第11周项目 函数及其应用

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1-函数版星号图]这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能.(1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printstars

2014秋C++ 第8周项目 分支程序设计

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. 阅读并验证 阅读下面的两段程序,用"人脑"运行写出输出结果,再在计算机或手机上运行程序,对比自己写出的结果,进行反思.1.#include <iostream>using namespace std;int main(){    int a=1,b=2,c=3;

C++第8周项目3 - 分数类中的运算符重载

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8806111 [项目3-分数类中的运算符重载]实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).求反.比较(6种关系)的运算.可以从第5周项目2的代码开始工作. class CFraction {private: int nume; /

C++第14周项目5——字符串统计

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目5-字符串统计]阅读下面的程序,完成类似的功能 #include<iostream> #include<cstdio> using namespace std; int main() { char str[50]; int i=0,n=0; cout<<"输入字符串:"; gets(str); while(str[i]!

2013-C++第17周项目参考解答链接集

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-体会函数参数传递] 设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求 (1)排序功能通过函数实现 (2)写出两个版本的函数,一个采用传地址值的方法,另一个采用引用类型作参数 参考解答在:http://blog.csdn.net/sxhelijian/article/details/8362289(2012级第17周项目1) [项目2-用指针玩字符串]指