C++中多个文件程序

一个程序按结构至少可以划分为三个文件:

      (1)类的声明文件(*.h文件)    

      (2)类的实现文件(*.cpp文件)  

      (3)主函数文件(使用到类的文件,*.cpp文件)

如果程序更复杂,我们会为每个类单独建一个声明文件和一个实现文件。这样要修改某个类时就直接找到它的文件修改即可,不需要其他的文件改动。

具体操作(实例):  

时钟类的例子

// 文件1:Clock类的声明,可以起名为Clock.h
#include <iostream>
using namespace std;
class Clock //时钟类声明
{
public: //外部接口
Clock();
void SetTime(int NewH, int NewM, int NewS); //三个形参均具有函数原型作用域
void ShowTime();
~Clock(){ }

private: //私有数据成员
int Hour,Minute,Second;

};

// 文件2:Clock类的实现,可以起名为Clock.cpp

#include "Clock.h" //时钟类成员函数实现
Clock::Clock() //构造函数
{ Hour=0;
Minute=0;
Second=0;
}
void Clock::SetTime(int NewH,int NewM,int NewS) {
Hour=NewH;
Minute=NewM;
Second=NewS;

}
void Clock::ShowTime() {
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}

// 文件3:主函数,可以起名为main.cpp

#include "Clock.h" //声明全局对象g_Clock,具有文件作用域,静态生存期
Clock g_Clock;

int main() //主函数
{
cout<<"文件作用域的时钟类对象:"<<endl; //引用具有文件作用域的对象:
g_Clock.ShowTime();
g_Clock.SetTime(10,20,30);
Clock myClock(g_Clock); //声明具有块作用域的对象myClock,并通过默认拷贝构造函数用g_Clock初始化myClock
cout<<"块作用域的时钟类对象:"<<endl;
myClock.ShowTime(); //引用具有块作用域的对象
}
Clock.cpp和main.cpp都使用#include "Clock.h"把类Clock的头文件Clock.h包含进来。
#include指令的作用就是将#include后面的文件嵌入到当前源文件该点处,被嵌入的文件可以是.h文件也可以是.cpp文件。
如果不包含Clock.h,Clock.cpp和main.cpp就不知道Clock类的声明形式,就无法使用此类,所以所有使用此类的文件都应该包含声明它的头文件。

上面的程序在编译时,由Clock.cpp和Clock.h编译生成Clock.obj,由main.cpp和Clock.h编译生成main.obj,
然后就是链接过程,Clock.obj和main.obj链接生成main.exe可执行文件。
如果我们只修改了类的实现文件,那么只需重新编译Clock.cpp并链接就可以,别的文件不用管,这样就提高了效率。
在Windows系统中的C++程序用工程来管理多文件结构,而Unix系统一般用make工具管理,如果大家从事Unix系统软件开发,就需要自己写make文件。

 

posted @ 2017-07-14 10:56  c++c鸟  阅读(948)  评论(0编辑  收藏  举报