码迷,mamicode.com
首页 > 其他好文 > 详细

设计自己的头文件

时间:2014-12-19 00:38:14      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:io   使用   sp   strong   on   文件   数据   bs   cti   

 

头文件一般包含1、类的定义,2、extern变量的声明, 3、函数的声明;

规则1: 头文件是用于声明的,而不是用于定义;

下面语句不应该出现在头文件中:

  extern int val = 10;  //虽然加了extern关键字,但这仍是一个定义,因为对val进行了初始化赋值;

  double fica_rate;    //这也是一个定义:定义了一个double型变量fica_rate, 为fica_rate分配了内存空间;

正确写法:

   extern doublefica_rate;

  extern int function1();

规则2:类的定义、值在编译时已知道的const对象、inline函数 最好写在头文件中;

 

#解析:

c++中任何变量都只能定义一次,定义会分配存储空间,而所有对该变量的使用都关联到同一存储空间。但头文件可能会被包含在多个源文件中,同一个程序中有两个以上文件含有规则1中的例子的定义,就会导致多重定义链接错误

为什么规则2中的所述的变量可以写在头文件中?

因为编译器需要知道这些尸体的定义(不只是声明)来产生代码。

对于类定义:编译器需要知道类该类的数据成员,和能够在这些对象上执行的操作;

对于const对象: const对象默认是定义该对象的局部变量。所以把它们放在头文件是合法的。在头文件中定义了const变量后,每个包含该头文件的源文件都有自己的const变量,其名称和值都一样,但存储空间不一样。 如果const变量不是已知的(不是用常量表达式初始化的),它就不应该定义在头文件中。

 

规则3:避免头文件被多重包含

因为头文件经常会包含其他头文件。例如,定义类A的头文件(假如是A.h)需要包含string.h(A类含有一个string类型数据成员,因此必须可以访问string头文件),而一个程序需要使用A类包含了A.h,这个程序同时也需要使用string库包含了string.h, 该程序不知道A.h已经包含了string.h, 这时string头文件就被包含了两次;

为避免多次包含同一头文件,应该在头文件中加入 预处理器变量

#ifndef   SALESITE_H

#define  SALESITE_H

// 在此添加头文件中定义

#endif

 

设计自己的头文件

标签:io   使用   sp   strong   on   文件   数据   bs   cti   

原文地址:http://www.cnblogs.com/91Kesson/p/4172974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!