自定义数据结构:编写自己的头文件
- 为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应与类的名字一样。
- 头文件通常包含那些只能被定义一次的实体、如类、const和constexpr变量。
tip:头文件一旦改变,相关的源文件必须重新编译以便获取更新过的声明。
预处理概述
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。确保头文件多次包含仍能安全工作的常用技术是预处理器,当预处理器看到#include标记时就会用指定的头文件的内容代替#include。
头文件保护符依赖于预处理变量。
预处理变量有两种状态:
- 已定义
- 未定义
#define指令把一个名字设定为预处理变量
#ifdef当且仅当变量已定义时为真
#ifndef当且仅当变量未定义时为真
一旦检查结果为真,则执行后续操作直至#endif指令为止。
使用这些就能有效有效防止重复包含的发生:
#ifndef SALES_DATA_H #define SALES_DATA_H #include <string> struct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0; }; #endif
第一次包含Sale_data.h时,#ifndef的检查结果为真,预处理将顺序执行后面的操作直至遇到#endif为止。
预处理变量SALES_DATA_H的值将变为已定义,而且Sales_data.h也会被拷贝到我们的程序中。
后面如果再一次包含Sale_data.h,则#ifndef的结果为假,编译器将忽略#ifndef到#endif之间的部分。
整个程序中的预处理变量包括头文件保护符必须唯一,通常的做法是基于头文件中类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。

更多精彩