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文件中,因为其生命周期是该文件的生命周期
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。