首页 > 代码库 > C++中的h文件与cpp文件

C++中的h文件与cpp文件

1、h文件的作用。

  假设没有h文件,那么在一个类(class A)中,要用到class B中的方法与函数,那么我们就应该在class A的cpp文件中,加上"class A;",不对,这样的声明仅仅表示有一个类叫作A,却不能指明类A中的属性与方法,所以正确的声明应该是:

1 class A
2 {
3    public:
4          int zz;
5          void test();
6 };  

这样才可以使用A的方法与属性。但是如果有很多个类,如类C、类D也需要的用到类A的方法与属性的话,那么将会有很多重复的代码,所以人们就创造出了头文件,仅仅通过#include,就可以方便使用,因为#inlcude "A.h"的作用就是将class A的声明包含到类B中。

 

2、编译过程:

  你可能会怀疑,这里仅仅是给出了类A的声明,那么它就能够在不知道类A的实现,就能使用类A的方法吗?,其实这就与编译器相关了。编译器一般会经过以下步骤:

  1.预处理阶段 

  2.词法与语法分析阶段 

  3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 

  4.连接阶段,即将只有声明,没有实现的内容(如类A),查找其编译文件(A.o),然后将其链接(link)起来,形成一个exe

 

3、头文件的重复包含的问题:

  既然#include的作用是将声明加入到cpp文件中,如果多次#include,那么将会引发编译错误,即重复包含,一般有两种解决方法:

  1、#program once

  2、#ifdef __XX_H__

    #define _XX_H__

    #endif

4、其它注意点:

  1、在头文件中定义的类的方法,会被编译器请求 inline (不一定成功)

  2、在头文件中定义的const成员,可以被包含在多个cpp文件中,因为其生命周期是该文件的生命周期