c++<9章> 内存模型与名称空间

来源:互联网 发布:招商银行mac控件下载 编辑:程序博客网 时间:2024/05/15 07:40

一、工程中文件内容的摆放

如果将函数的定义,结构的定义,类的定义,以及main函数都放在一个cpp文件里的话,不仅看起来一团乱嘛,而且对于后期的维护也相当的棘手,出于上述问题的考虑需要合理布局,一般布局如下:在头文件里放置函数原型,结构,(不包括类中具体的函数定义)类的声明,模板声明,内联函数,在一个文件cPP里放置功能函数的的定义。

     问:为什么类的定义和结构的定义不能单独放在cPP里共其他文件使用?   

     答:因为在编译时每个文件是独立编译的,如果结构和类的定义在其他文件里时,那么当前文件编译时就无法根据其对象大小为其分配内存,但是函数可以,因为函数的原型里已经说明了要返回的类型,所以可以为其分配内存(类在其他文件定义时,可以在当前文件定义类指针也说明了同样的道理)。

   问:为什么不宜将函数定义搁在头文件中?

   答:因为加入该文件被两个cPP文件同时包含,则就出现同一个程序中一个函数二次定义(内联函数除外),进而报错。

  问:声明和原型可以重复两次吗?

  答:没错,重复100次也没人管,在链接是不回报错,但是定义就肯定会报错,所以头文件中不能放置函数定义或者是类的函数定义,顺便复习一下#ifndef A_H  #define A_H的使用意义,一般是将头文件这样处理,假如a.h被这样处理了,则另一个头文件b,h包括了他,在某个cPP文件中同时包含了a.h和b.h,那么这样的好处是可以减轻编译的工作量,对于人来说没啥用,因为语法都是正确的,因为重复申明无措,但是要养成#ifnde的好习惯,因为有的头文件里会定义全局变量,这样这个习惯会有帮助。

0 0