c++中xx.h和xx.cpp之间的联系 c .h .cpp

不是很严格的讲,*.h文件做的是类的声明,包括类成员的定义和函数的声明,而*.cpp文件做的类成员函数的具体实现(定义)。

一个*.h文件和*.cpp文件一般是配对的。在*.cpp文件的第一行一般也是#include"*.h"文件,其实也相当于把*.h文件里的东西复制到*.cpp文件的开头。所以,你全部写在*.cpp文件其实也是一样的。

除了编程规范外,还涉及到类一个重要性质,就是封装性。比如现在我们公司和另一家软件公司合作,这样就必然要互相提供一些软件的信息(比如一些类,它到底是要做什么的),可是在提供这些信息的同时我们又不像让对方知道我们这些类的具体实现,毕竟这些是我们公司的算法核心和心血啊。所以这个时候就可以把类的接口(这个类是要做什么的)放在*.h文件中,而具体类的实现放在*.cpp文件。这时候我们只要给对方公司*.h文件就行了。这样既提供了必要的信息,又保护了我们的核心代码。

最表面的机制是:

头文件是程序的界面(是代码界面),提供给程序员以类、模版、函数等一系列的声明,让程序员知道应该怎么调用里面的“东西”。

c++中xx.h和xx.cpp之间的联系 c .h .cpp

从动态链接库的角度看:

头文件提供界面,使得程序员在需要加载一个库函数的时候(这里也仅仅是举简单的例子)查看头文件就知道怎么加载这个动态库内部的函数。

从软件的扩展来说:

将头文件作为界面,再去定义它的实现,这样只要保证界面不变(头文件不变),就可以只修改实现文件,而不必修改其他的实现代码。比如你有一个sort()函数来排序,在一个大程序中,你后来发现这个sort()有更好的算法,于是你只需要去修改函数的实现(修改.cpp文件的sort()函数的代码),其他使用这个函数的地方可以完全保持不变,这是分割技术的第一个好处。

从模块性来讲:

界面后面隐藏实现代码,代码具有更好的物理模块性,减小程序的复杂度。

从编译的角度看:

所有源文件都是被编译器分别划分单元来分别编译,在编译的过程中,头文件被嵌入到实现文件里面一起作为一个编译单元被编译(实现文件filename.cpp里的

#include "filename.h"

那一行被替换成filename.h里面的所有内容(实际上会把预处理指令去掉,这才是预处理最本质的作用))。

举一个简单的例子,你定义了sort()函数,在test.h头文件里声明,在test.cpp里定义,这个时候在test.cpp里面#include"test.h",并定义sort)()函数。

你需要在头文件内部写预处理代码

#ifndef _TEST_H_

#define _TEST_H_

#endif

预处理指令防止头文件被多重包含,如果你的代码出现了诡异的错误,请注意这个问题,可能是你没有写头文件保护,在符号链接阶段链接器发现有多个相同的名字,它不知道应该跟哪一个符号链接在一起,所以报错。

从节约时间的角度看:

在一些大型项目里面,编译一个项目不是整个一起同时编译的,一般情况是分别交给几个负责人去编译,测试,最后链接起来。如果中间发现有一个实现文件有BUG,只需要修改这个.cpp文件,其他的文件就可以原封不动。

再重新编译的时候,只需要单独便宜修改过的这一块,其他的部分不动。然后再链接成可执行程序。

这种机制在一个可能完整编译需要花费超级计算机几天时间的项目上是非常有用的,想一下,没有这种机制,要是一个程序随便修改一个地方。这个程序就要花几天时间来编译,这事情,怎么了得?

使用连接器的两个原因:

1.编译成目标文件的时候代码的内部符号被编译器修改过。

2.目标文件被组织成一个整的大型文件,所有符号被定位,保证每一个函数调用都找得到他本身的定义位置

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/329393.html

更多阅读

单反相机入门机、中端机和高端机的区别 入门单反相机推荐2016

其实对于这个问题,我没有太多想说的话,因为我觉得摄影这个东西,用什么器材无所谓,重要的是相机后面那个脑袋,很多摄影大赛的获奖作品都是手机拍摄,本人虽然是专业摄影师出身,但至今还寒酸的用着几年前买的佳能500D这个入门机,对各种机器的了

Gary Baseman》处于天才和蠢才之间的模糊地带 gary baseman介绍

对于喜欢公仔的雅痞族来说,Gary Baseman不是一个陌生的名字。他是玩具大师、艺术家、影视生产商、画家、作家……难怪入选美国Entertainment Weekly当代娱乐界最具创意人之一。Gary Baseman的作品充满了趣味与想象力,带有一点黑色幽默

我和小动物之间的故事

我和小动物之间的故事刘山霞  已经远离乡村的我来到开阔的城市,听不见缠绵的牛哞声,听不见反复吟唱的虫鸣声;在偶尔有风的夏夜看不见漫天的萤火虫,秋天的山上躺满金黄的松针叶,还有那树木的清香也一一不复存在。只是在熟睡与半睡之间

显存频率和内存速度之间的关系 加速度与频率的关系

Q:显存频率跟内存快度之间的闭解显存频率取显存时钟周期是相干的,二者败倒数闭解,也就是显存频率=1/显存时钟周期,防范笔记本电脑蓝屏的方法。假如是SDRAM显存,其时钟周期替6ns,教你选块好主板DIY才有真乐趣_2445,这么它的显存频率就为1/

声明:《c++中xx.h和xx.cpp之间的联系 c .h .cpp》为网友謸眎颩凨分享!如侵犯到您的合法权益请联系我们删除