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文件中,因为其生命周期是该文件的生命周期

C++中的h文件与cpp文件,布布扣,bubuko.com

时间: 2024-12-14 07:40:13

C++中的h文件与cpp文件的相关文章

c中头文件在cpp文件中引用和.h文件引用的思考

我们在编写程序中头文件是经常使用的.但是头文件是应该包含在.H文件中还是在.cpp文件中.在这个当中有什么样去区别呢.  假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中.在a.h文件有使用了b.中定义的类型type1数据m_type,同样b.cpp的头文件一些变量也声明在b.h中.此时我们当然可以在a.cpp中包含b.h 也可以在a.h中.这样都是可行的,因为我们编译的时候会会将b.h包含进来.而.h文件是不参与编译的.然后我们继续深入.假如我们将b.h文件定

c中头文件在cpp文件里引用和.h文件引用的思考

我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中. 在a.h文件有使用了b.中定义的类型type1数据m_type,相同b.cpp的头文件一些变量也声明在b.h中. 此时我们当然能够在a.cpp中包括b.h 也能够在a.h中.这样都是可行的.由于我们编译的时候会会将b.h包括进来. 而.h文件是不參与编译的.然后我们继续深入. 假如我们将b.

VS error LNK2019: 无法解析的外部符号 " h文件和cpp文件链接不上

同时存在.h和.cpp,cpp中函数已经定义,依旧提示无法解释的外部符号 VS中对文件有中表示,可以通过选中.h或.cpp文件,右键,属性--通常--项类型中 C/C++标头是针对头文件的,C/C++编译器是针对cpp文件,根据这个改正就好了 这次出现的原因应该是本人一开始在.h文件中定义函数,而没有创建一个cpp文件,VS把它当成cpp来用吧 后来本人又创建了一个cpp文件,C/C++编译器属性被.h文件占用了,cpp文件就不认识了

vs中.h文件与.cpp文件之间的切换

我最近写了很多C++程序,头文件与源文件之间的切换实在是件痛苦的事.在vc6.0中有一个宏可以实现这个切换,但是我发现这个宏在vs2008中不好用.像其他出色的程序员一样,我决定自己写一个宏来实现这个功能. 如果你之前没有写过这个宏,那么请参考以下步骤: 1.在vs中选择Tools | Macros | Macros IDE,打开宏窗口: 2.右键点击左侧目录的MyMacros,选择Add | Add Module新建一个文件,将其重命名为CppUtilities,此时这个文件会在编辑器中打开:

在C的头文件中定义的结构体,如何在cpp文件中引用

解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dialog3.h" #include <QDebug> extern "C" { typedef struct PRINT { unsigned char Parameters;//BitDepthAC,BitDepthDC,q unsigned char PlaneCo

Visual Studio中的一些较大的文件的作用

1.sdf 这些是工程中的中间,用于预编译等作用,最终可执行文件是不需要的,默认情况下,删除后重新编译还会生成.如果不需要,在Visual Studio里进入如下设置: 进入“Tools > Options”,选择“Text Editor > C/C++ >Advanced”: 然后找到“Fallback Location”.然后把“Always use Fallback Location”和“Do Not Warn if Fallback Location”设置成“True”就可以了.

VS工程中的各种文(工程文件异常的解决办法)

一.sln文件 .sln(Solution)解决方案文件,表示一个项目组,他通常包含一个项目中所有的工程文件信息. 二.suo文件 suo(Solution User Options)解决方案用户选项文件,记录所有与解决方案建立关联的选项,以便在每次打开时,它都包含用户所做的自定义设置..suo文件偶尔会被破坏,从而在构建和编辑应用程序时出现意想不到的结果.如果Visual Studio对于每个解决方案不稳定,就应删除.suo文件.下次打开解决方案时,Visual Studio会重建它. 有的时

VC++中.DLL文件与.LIB文件关系

一般的LIB文件是"导入库",用来提供给link.exe,作为链接DLL--也就是"动态链接库"的依据.里面记录了类似下面的信息:调用函数xxx(),连接到x.dll的0xABCDEFGH地址:-- 早期的LIB,是"静态链接库",也是用来提供给link.exe,作为链接代码用的.里面的记录如下:调用xxx(),其代码是--:DLL的LIB(导入库),不含可执行的具体代码(代码在DLL中).而最早的LIB(静态链接库),里面含有代码.所以,可以看

C++的头文件和实现文件分别写什么

在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析.于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念. 对于以C起步,C#作为"母语"的我刚开始跟着导师学习C++对这方面还是感到很模糊.虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用.但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了.因此对于C++的Package