2.6 自定义数据结构

2.6.1 定义Sale_data类型

本节介绍仅含数据成员的类的定义方法
定义类以关键字struct 开始,紧跟着类名和类体(类体可以为空)。
1.类体由一对花括号包围形成一个新的作用域。
2.类内部定义的名字必须唯一,但是可以与类外部定义的名字重复(使用时屏蔽掉外部的重名)。
3.类体右侧的表示结束的花括号后必须写一个分号,因为类体后可以紧跟变量名以示对该类型对象的定义。

一般来说,最好不要把对对象的定义和对类的定义放在一起,一条语句含混了两种定义是不被推荐的。
c++ 新标准规定,可以为数据成员提供一个类内初始值。创建对象时,类内初始值将用于初始化数据成员。
【c++ 语言还提供了class 关键字供用户来自定义数据结构。】
2.6.2 使用Sales_data 类
两个对象读入数据以及输出两个对象的和在书店程序时已经写过,便不再详细写入。
2.6.3 编写自己的头文件
可以在函数体内定义类,但函数体内的类受到一些限制,所以一般不在函数体内定义类。
如果要在不同文件中使用同一个类,类的定义必须保持一致。
为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且头文件的名字应与类名一致。
头文件中经常也要用到其他头文件的功能,如Sales_data 类中包含string 成员,所Sales_data.h 必须包含string.h 头文件,同时在使用Sales_data 的程序中,因为要操作string ,还要包含一次string.h (实际上只要包含一次即可,但因为头文件有防止重复定义的机制,在每个用到头文件中内容的单元各自包含一次头文件可以防止出错)。

预处理器在编译之前会将#include 替换为其指定的头文件。
头文件保护符是另一种预处理功能,其能有效地防止重复包含产生的不期望的后果。

#define指令将一个名字设定为预处理变量。
#ifdef指令当且仅当其指定的名字已被设定为预处理变量才为真。
#ifndef指令当且仅当其指定的名字未被设定为预处理变量才为真。

以上两条指令仅当结果为真时才执行后续操作直到遇到#endif 指令。

#ifndef SALES_DATA_H//加注释的三条应习惯性地加在所有自编辑的头文件中
#define SALES_DATA_H//加注释的三条应习惯性地加在所有自编辑的头文件中
#include <string>
struct Sales_data{…};
#endif//加注释的三条应习惯性地加在所有自编辑的头文件中

以上的指令布置能有效地防止头文件中的定义被重复执行,只有第一次包含该头文件时才能顺利进行类的定义。

预处理变量无视c++ 语言中关于作用域的规则。
整个程序中的头文件保护符必须唯一,通常的做法是基于头文件中类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。
头文件即使还未被包含在任何其他头文件中,也应作为习惯设置头文件保护符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值