c++primer学习笔记-----2.6自定义数据结构
2017-03-22 15:46
190 查看
{这一节内容因为在之前学C时接触过,所以掌握得不错}
【定义类以关键字struct 开始,紧跟着类名和类体(类体可以为空)。
类体由一对花括号包围形成一个新的作用域。
类内部定义的名字必须唯一,但是可以与类外部定义的名字重复(使用时屏蔽掉外部的重名)。】
【类体右侧的表示结束的花括号后必须写一个分号,因为类体后可以紧跟变量名以示对该类型对象的定义。
一般来说,最好不要把对对象的定义和对类的定义放在一起,一条语句含混了两种定义是不被推荐的。】
【c++ 新标准规定,可以为数据成员提供一个类内初始值。
创建对象时,类内初始值将用于初始化数据成员。】
【c++ 语言还提供了class 关键字供用户来自定义数据结构(7.2)。】
【可以在函数体内定义类,但函数体内的类受到一些限制,所以一般不在函数体内定义类。
如果要在不同文件中使用同一个类,类的定义必须保持一致。
为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且头文件的名字应与类名一致。
头文件中经常也要用到其他头文件的功能,如Sales_data 类中包含string 成员,所以Sales_data.h 必须包含string.h 头文件,同时在使用Sales_data 的程序中,因为要操作string ,还要包含一次string.h (实际上只要包含一次即可,但因为头文件有防止重复定义的机制,在每个用到头文件中内容的单元各自包含一次头文件可以防止出错)。】
【预处理器在编译之前会将#include 替换为其指定的头文件。
头文件保护符是另一种预处理功能,其能有效地防止重复包含产生的不期望的后果。
#define指令将一个名字设定为预处理变量。
#ifdef指令当且仅当其指定的名字已被设定为预处理变量才为真。
#ifndef指令当且仅当其指定的名字未被设定为预处理变量才为真。
以上两条指令仅当结果为真时才执行后续操作直到遇到#endif 指令。】
【
以上的指令布置能有效地防止头文件中的定义被重复执行,只有第一次包含该头文件时才能顺利进行类的定义。】
【预处理变量无视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++ 语言中关于作用域的规则。
整个程序中的头文件保护符必须唯一,通常的做法是基于头文件中类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。
头文件即使还未被包含在任何其他头文件中,也应作为习惯设置头文件保护符。】
相关文章推荐
- 【C++学习笔记】处理类型和自定义数据结构
- 学习数据结构的笔记(第一章)
- 数据结构学习笔记之一:链表
- 数据结构学习笔记--稀疏矩阵的压缩存储
- C++PRIMER学习笔记
- 数据结构习题学习笔记(The Third Day)
- IssueVision 学习笔记(一)-----使用SoapHeader传递Web Serivices自定义的身份验证数据
- 数据结构习题学习笔记(The First Day)
- 数据结构学习笔记--迷宫
- 数据结构习题学习笔记(The Fifth Day)
- 数据结构学习笔记
- 严蔚敏数据结构学习笔记六.树和二叉树
- IssueVision 学习笔记(二)-----为控件添加自定义属性和事件
- C++primer 第三章学习笔记(string篇)
- 一篇不错的数据结构学习笔记!
- 用户自定义控件学习笔记
- 学习Membership笔记2-自定义RoleProvider和MembershipProvider
- 数据结构学习笔记--Huffman树
- 数据结构习题学习笔记(The Second Day)
- 数据结构习题学习笔记(The Sixth Day)