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文件中,因为其生命周期是该文件的生命周期
时间: 2024-12-14 07:40:13