c++primer学习笔记-----2.6自定义数据结构

{这一节内容因为在之前学C时接触过,所以掌握得不错}

 

2.6.1 定义Sales_data 类型(新标准

{本节介绍仅含数据成员的类的定义方法}

 

【定义类以关键字struct 开始,紧跟着类名和类体(类体可以为空)。

类体由一对花括号包围形成一个新的作用域。

类内部定义的名字必须唯一,但是可以与类外部定义的名字重复(使用时屏蔽掉外部的重名)。】

 

类体右侧的表示结束的花括号后必须写一个分号,因为类体后可以紧跟变量名以示对该类型对象的定义。

一般来说,最好不要把对对象的定义和对类的定义放在一起,一条语句含混了两种定义是不被推荐的。】

 

c++ 新标准规定,可以为数据成员提供一个类内初始值。

创建对象时,类内初始值将用于初始化数据成员。】

 

c++ 语言还提供了class 关键字供用户来自定义数据结构(7.2)。

 

2.6.2 使用Sales_data 类(easy)

 

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++ 语言中关于作用域的规则。

整个程序中的头文件保护符必须唯一,通常的做法是基于头文件中类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。

头文件即使还未被包含在任何其他头文件中,也应作为习惯设置头文件保护符。】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值