我们定义一个数据类型称为Time,用于记录一天的时间,以此作为第二例自定义数据结构。小时、分、秒是构成时间的各种信息,这些都是结构体的实例变量。
The first step is to decide what type each instance variable should be. It seems clear that hour andminute should be integers. Just to keep things interesting, let’s make secondadouble, so we can record fractions of a second. Here’s what the structure definition looks like: 第一步要决定每个实例变量的类型。小时和分应该是整型。这回我们搞个有趣的,把秒定义为double型,以便记录秒的小数部分。下面是结构体的定义代码:
~~~
struct Time {
int hour, minute;
double second;
};
~~~
我们可以按常规方式创建Time对象:
~~~
Time time = { 11, 59, 3.14159 };
~~~
此对象的状态图如下:
![enter image description here](https://box.kancloud.cn/2015-09-02_55e641210a464.jpg)
“实例”一词有时用于探讨对象的问题,因为每个对象都是某种类型的实例(或示例)。之所以称之为实例变量,是因为某种类型的每个实例都是该类型实例变量的一个备份。
- 第1章 编程之路
- 1.1 什么是编程语言
- 1.2 什么是程序
- 1.3 什么是调试
- 1.4 形式语言与自然语言
- 1.5 第一个程序
- 1.6 术语表
- 第2章 变量和类型
- 2.1 更多的输出
- 2.2 值
- 2.3 变量
- 2.4 赋值
- 2.5 输出变量
- 2.6 关键字
- 2.7 操作符
- 2.8 操作顺序
- 2.9 操作符
- 2.10 组合
- 2.11 术语表
- 第3章 函数
- 3.1 浮点数
- 3.2 double到int的转换
- 3.3 数学函数
- 3.4 函数组合
- 3.5 添加新函数
- 3.6 定义与使用
- 3.7 多函数编程
- 3.8 参数与参数值
- 3.9 参数和变量的局部性
- 3.10 多参函数
- 3.11 有返回值的函数
- 3.12 术语表
- 第4章 条件和递归
- 4.1 取模操作符
- 4.2 条件执行
- 4.3 选择执行
- 4.4 链式条件
- 4.5 嵌套条件
- 4.6 return语句
- 4.7 递归
- 4.8 无穷递归
- 4.9 递归函数的栈图
- 4.10 术语表
- 第5章 有返回值的函数
- 5.1 返回值
- 5.2 程序开发
- 5.3 组合
- 5.4 重载
- 5.5 布尔值
- 5.6 布尔变量
- 5.7 逻辑操作符
- 5.8 布尔函数
- 5.9 从main函数返回
- 5.10 深入递归
- 5.11 思路跳跃
- 5.12 又一个例子
- 5.13 术语表
- 第6章 迭代
- 6.1 多次赋值
- 6.2 迭代
- 6.3 while语句
- 6.4 制表
- 6.5 二维表
- 6.6 封装和泛化
- 6.7 函数
- 6.8 再说封装
- 6.9 局部变量
- 6.10 再说泛化
- 6.11 术语表
- 第7章 字符串那些事儿
- 7.1 字符串的容器
- 7.2 apstring变量
- 7.3 从字符串中提取字符
- 7.4 字符串长度
- 7.5 遍历
- 7.6 一个运行时错误
- 7.7 find函数
- 7.8 我们自己的find版本
- 7.9 循环与计数
- 7.10 增量与减量操作符
- 7.11 字符串连接
- 7.12 apstring是可变的
- 7.13 apstring是可比较的
- 7.14 字符分类
- 7.15 其他apstring函数
- 7.16 术语表
- 第8章 结构体
- 8.1 复合值
- 8.2 Point对象
- 8.3 访问实例变量
- 8.4 对结构体的操作
- 8.5 作为参数的结构
- 8.6 传值调用
- 8.7 传引用调用
- 8.8 矩形
- 8.9 作为返回值的结构
- 8.10 按引用传递其他类型
- 8.11 获取用户输入
- 8.12 术语表
- 第9章 再谈结构体
- 9.1 Time结构体
- 9.2 printTime函数
- 9.3 对象函数
- 9.4 纯函数
- 9.5 const参数
- 9.6 修改函数
- 9.7 填充函数
- 9.8 哪个最佳?
- 9.9 增量开发vs高屋建瓴
- 9.10 泛化
- 9.11 算法
- 9.12 术语表
- 第10章 向量
- 10.1 元素访问
- 10.2 向量的复制
- 10.3 for循环
- 10.4 向量的长度
- 10.5 随机数
- 10.6 统计
- 10.7 随机数的向量
- 10.8 计数
- 10.9 检查其他值
- 10.10直方图
- 10.11一次遍历的方案
- 10.12随机种子
- 10.13术语表
- 第11章 成员函数
- 11.1 对象和函数
- 11.2 print
- 11.3 隐式变量访问
- 11.4 另一个例子
- 11.5 再一个例子
- 11.6 更复杂的例子
- 11.8 初始化还是构造?
- 11.7 构造函数
- 11.9 最后一个例子
- 11.10 头文件
- 11.11 术语表
- 第12章 对象的向量
- 12.1 组合
- 12.2 纸牌对象(Card)
- 12.3 printCard函数
- 12.4 equals函数
- 12.5 isGreater函数
- 12.6 纸牌的向量
- 12.7 printDeck函数
- 12.8 查找
- 12.9 二分查找
- 12.10 牌堆与子牌堆
- 12.11 术语表
- 第13章 基于向量的对象
- 13.1 枚举类型
- 13.2 switch语句
- 13.3 牌堆
- 13.4 另一个构造函数
- 13.5 Deck成员函数
- 13.6 洗牌
- 13.7 排序
- 13.8 子牌堆
- 13.9 洗牌与发牌
- 13.10 归并排序
- 13.11 术语表
- 第14章 类与不变式
- 14.1 私有数据和私有类
- 14.2 什么是类?
- 14.3 复数
- 14.4 访问函数(Accessor functions)
- 14.5 输出
- 14.6 复数相关函数(一)
- 14.7 复数相关函数(二)
- 14.8 不变式
- 14.9 先决条件
- 14.10 私有函数
- 14.11 术语表
- 第15章 文件输入/输出与apmatrix类
- 15.1 流
- 15.2 文件输入
- 15.3 文件输出
- 15.4 解析输入
- 15.5 解析数字
- 15.6 集合数据结构Set
- 15.7 apmatrix类
- 15.8 距离矩阵
- 15.9 一个更合理的距离矩阵
- 15.10 术语表