文档详情

C++第六章要点.ppt

发布:2016-05-03约1.84万字共67页下载文档
文本预览下载声明
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3. 头文件卫士(Header File Safeguard) 我们可以用条件编译指令作为“头文件的卫士”,它可以保证嵌套包含的头文件中不会出现内部链接属性的名称(例如全局常量、类型定义、类定义等)被重复定义。 头文件卫士的作用 例如,在头文件date.h中出现: #ifndef DATE #define DATE calss Date { int year,month,day; …… } #endif 3. 头文件卫士(续) 该条件编译指令的意思是:如果程序中没有定义名称DATE,则定义之,并且进一步定义名为Date的类(日期类),否则(DATE已被定义,也表明类Date已被定义),跳过类Date的定义。 //date.h #ifndef DATE #define DATE calss Date { int year,month,day; …… } #endif 这样即使date.h被嵌套包含,也能保证Date类不会在一个程序文件中被定义二次。 DATE是预编译名(编译开关),预编译名不是类型名,它仅在编译期存在。虽然名称可以任意,但一般取为与预编译内容(分支)有关的名称,例如Date是类名,则预编译名就取为DATE。 4. 宏定义指令 宏定义指令(define)用来定义符号常量、预编译名、函数等。 宏定义指令的作用 定义符号常量 #define 标识符 常量字面值 例如: #define pi 3.14159 // pi不能进入程序的调试与运行 这种用法已逐渐被常量声明所代替: const pi=3.14159; 4. 宏定义指令(续) 定义预编译名 #define 标识符 #ifndef DATE #define DATE calss Date { int year,month,day; …… } #endif 4. 宏定义指令(续) 宏定义函数 例如:(例6-8) #define MAX(a,b) ((a)(b)?(a):(b)) int a=1,b=0; MAX(a++,b); 注意:宏定义函数并不是真正的函数。编译预处理只是在出现“函数名”的地方,插入“代入参数”后的代码。 #define MAX(a,b) ((a)(b)?(a):(b)) int a=1,b=0; (a++)(b)?(a++):(b);// 原本是MAX(a++,b); * * * * * * * * * * * * * * * * * * * * * * * * * * * 3. 头文件的内容(续3) 模板声明和定义 例如:templateclass T class A{…}; 名空间定义 例如:namespace N{…}; 预编译命令 例如:#include iostream 函数原型(函数声明) 全局(符号)常量数据声明 外部数据声明 类型定义 3. 头文件的内容(续4) 函数原型(函数声明) 全局(符号)常量数据声明 外部数据声明 类型定义 模板声明和定义 名空间定义 预编译命令 可以看出,头文件的内容就是源程序所需的外部资源一览表,只要头文件上有的(例如函数声明),就可以按语法格式去使用。 注意:头文件一定不能包括如下内容: 全局变量定义,如 int a; 函数定义,如 void f(){…}; 理由:如果含有全局变量定义、函数定义的头文件被其它源程序文件所包含,就会出现多处(次)定义。 6.3 全局数据(Global Data) 1. 什么叫全局数据 在所有函数之外声明的数据(包括变量和常量)称为全局数据。 全局数据存放在程序的全局数据区,其作用域是全局的,也即在整个程序运行期间有效,可以被程序中的每一个函数访问。 例如: int a; const int MAX=100; void f1(){…} void f2(){…} …. void main(){…} 例如:a和MAX可以被f1、f2、main等函数访问。 #include iostream.h int n; char ret=t; void f1(int ); void main() { int v1,v2;
显示全部
相似文档