内容简介
第1章 开始学习C/C++
1.1 开发平台
1.2 第一个程序
1.2.1 代码解析
1.2.2 在Windows XP环境下的问题
1.2.3 常见的问题
1.3 代码与程序
1.4 C语言和C++语言
第2章 控制台输入与输出
2.1 控制台输出
2.1.1 输出整数
2.1.2 用变量表示整数
2.1.3 指定显示宽度
2.1.4 输出小数
2.1.5 用变量表示小数
2.1.6 指定小数点后的位置
2.2 控制台输入
2.2.1 输入整数
2.2.2 输入小数
2.2.3 一次输入多个数
2.3 注释
2.4 空白
2.5 常见问题
2.6 综合例题
第3章 变量与常量
3.1 变量
3.1.1 变量的定义
3.1.2 变量的命名
3.1.3 变量的赋值
3.2 整型变量
3.2.1 char/short/int类型
3.2.2 unsigned无符号类型
3.2.3 bool布尔类型
3.2.4 enum枚举类型
3.2.5 long long长整数类型
3.3 浮点型变量
3.4 数的进制表示
3.4.1 数的十进制表示
3.4.2 数的十六进制表示
3.4.3 数的二进制表示
3.5 变量与内存
3.5.1 二进制存储
3.5.2 内存
3.5.3 变量的大小
3.5.4 变量在内存中的表示
3.5.5 变量的地址
3.5.6 理解变量的赋值
3.6 const常量
3.7 字面常量
3.8 常用类型的范围
第4章 数组
4.1 引例
4.2 数组的定义
4.2.1 数组的命名
4.2.2 数组的长度
4.3 数组的基本使用方法
4.3.1 数组的初始值
4.3.2 访问数组中的元素
4.3.3 用sized取得数组的大小
4.4 数组的内存视图
4.5 常见问题
4.6 数组的使用实例
4.6.1 实例1
4.6.2 实例2
4.6.3 实例3
4.6.4 实例4
4.7 多维数组
4.7.1 二维问题的表示
4.7.2 二维数组的定义
4.7.3 二维数组的初始化
4.7.4 二维数组的本质
第5章 字符与字符数组
5.1 字符是什么
5.2 字符的表示
5.3 字符的显示
5.4 字符常量
5.5 字符数组
5.5.1 输出字符串
5.5.2 输入字符串
5.5.3 理解结束符的作用
5.5.4 字符串的截断
5.5.5 常见问题
5.6 转义字符
5.6.1 转义字符的概念
5.6.2 转义字符的使用举例
第6章 表达式与操作符
6.1 算术表达式
6.2 赋值表达式
6.2.1 左值
6.2.2 理解赋值运算
6.2.3 赋值与算术运算合并
6.2.4 等号串连的写法
6.3 关系表达式
6.4 条件表达式
6.5 逻辑表达式
6.6 逗号表达式
6.7 自增/自减操作符
6.8 位操作符
6.8.1 按位表示
6.8.2 位运算规则
6.8.3 移位操作
6.8.4 应用举例
6.8.5 例题:把unsigned int整数转为4个字节
6.9 类型的转换与提升
6.10 优先级与结合顺序
6.10.1 使用括号
6.10.2 常用的优先级
第7章 语句
7.1 什么叫语句
7.2 if语句
7.2.1 使用复合语句
7.2.2 最简形式if
7.2.3 完全形式if…else if…else if…else
7.3 switch语句
7.3.1 匹配
7.3.2 跳转与执行
7.3.3 注意事项
7.4 for语句
7.4.1 引例
7.4.2 使用for语句
7.4.3 变形1:省略初始表达式
7.4.4 变形2:省略第二个表达式
7.4.5 变形3:省略后置表达式
7.4.6 变形4:全部置空
7.4.7 存在break语句
7.4.8 存在continue语句
7.5 while语句
7.5.1 变形:条件判断内置
7.5.2 例题
7.6 do…while语句
7.7 综合例题1
7.8 综合例题2
第8章 函数
8.1 引例
8.2 初步认识函数
8.3 函数的定义
8.3.1 函数名
8.3.2 参数列表
8.3.3 返回值类型
8.3.4 函数的实现
8.3.5 return语句的用法
8.4 函数的调用
8.4.1 函数的调用过程
8.4.2 参数的顺序
8.4.3 函数的传值调用
8.4.4 忽略返回值
8.4.5 直接使用返回值
8.5 全局变量和局部变量
8.6 变量的作用域与生命期
8.6.1 变量的作用域
8.6.2 变量的生命期
8.7 变量名重名问题
8.8 函数声明与函数定义
8.8.1 函数的声明
8.8.2 函数声明相关问题
8.9 main函数
8.10 参数的隐式转换
8.11 函数名重载
8.12 重载函数的匹配
8.12.1 精确匹配
8.12.2 模糊匹配
8.13 参数的默认值
8.14 内联函数
8.15 函数的递归调用
第9章 指针
9.1 内存地址的表示
9.2 指针的概念
9.3 星号操作
9.4 指针与数组
9.4.1 指针加减法
9.4.2 指针与数组的转换
9.5 指针作为函数的参数
9.6 数组作为函数的参数
9.7 指针作为函数的返回值
9.8 const指针
9.9 void型指针
9.10 安全地使用指针
9.11 二重指针
9.12 二维数组与指针
9.12.1 作为函数的参数
9.12.2 二维数组与指针的转换
第10章 结构体
10.1 引例
10.2 结构体概述
10.3 结构体的基本用法
10.3.1 变量定义和初始化
10.3.2 访问结构体的成员
10.3.3 定义结构体数组
10.4 结构体的内存视图
10.4.1 结构体的成员
10.4.2 对齐与填充
10.5 结构体的更多用法
10.5.1 结构体的赋值
10.5.2 结构体指针
10.5.3 作为函数的参数
10.5.4 作为函数的返回值
10.5.5 作为结构体的成员
10.6 结构体的特殊写法
10.6.1 没有类型名
10.6.2 函数内部的结构体类型
10.6.3 紧凑的形式
10.6.4 C语言中的struct定义
10.7 结构体的命名
10.8 传值与传地址
10.9 位字段bit-field
10.10 实例
第11章 联合体
11.1 概念
11.2 进一步理解union
11.3 实例
11.4 union的替代方案
第12章 动态分配内存
12.1 引例
12.2 动态分配内存
12.3 内存管理器与堆
12.4 对象的生命期
12.5 实例1
12.6 实例2
12.7 常见问题
第13章 链表
13.1 概念
13.2 链表的构造
13.2.1 头节点与末节点
13.2.2 链表头的作用
13.2.3 常见问题
13.3 有头链表
13.3.1 概念
13.3.2 定义一个有头链表
13.3.3 添加一个节点
13.3.4 有头链表的遍历
13.3.5 按顺序插入节点
13.3.6 查找和删除节点
13.3.7 和无头链表的比较
第14章 引用
14.1 引用的定义
14.2 与指针的区别
14.3 简单的例子
14.4 作为函数的参数
14.5 作为函数的返回值
14.6 const引用
第15章 字符串
15.1 字符串的三种形式
15.2 字符串常量的多行表示
15.3 字符串与普通数据
15.4 字符串的遍历
15.5 字符串长度
15.6 字符串复制
15.7 字符串比较
15.8 字符串插入和删除
15.8.1 删除字符
15.8.2 插入字符
15.8.3 插入和删除的效率问题
15.9 字符串的分割
15.10 用数组还是用指针
第16章 标准C函数库
16.1 stdio.h
16.2 math.h
16.3 time.h
16.3.1 time_t
16.3.2 struct tm
16.3.3 time取得系统当前时间
16.3.4 localtime得到年月日时分秒
16.3.5 mktime构造时间
16.4 stdlib.h
16.5 string.h
第17章 文件操作
17.1 认识文件
17.2 保存数据
17.2.1 fopen打开文件
17.2.2 fclose关闭文件
17.2.3 fwrite写入数据
17.3 读取数据
17.4 数据的存储格式
17.5 存储格式:按字节存储
17.5.1 指针指向的对象
17.5.2 Run-Length Encoding存储
17.6 存储格式:文本化存储
17.6.1 fprintf按行格式化写入
17.6.2 fgets按行读取
17.7 文件的随机访问
17.7.1 fseek随机访问
17.7.2 文件位置指示器
17.7.3 随机访问示例
17.7.4 fseek的物理限制
17.7.5 文件被重复打开的情况
17.8 文件打开模式
17.9 常见问题
第18章 多文件项目及编译过程
18.1 extern
18.1.1 extern声明全局函数
18.1.2 extern声明全局变量
18.1.3 深入理解extern
18.2 多文件项目的生成
18.2.1 第一阶段:编译
18.2.2 第二阶段:链接
18.2.3 用伪代码表示整个过程
18.2.4 全量编译与增量编译
18.3 头文件#include指令
18.3.1 为什么需要头文件
18.3.2 使用头文件
18.3.3 # include指令的原理
18.3.4 头文件的重复包含问题
18.3.5 头文件里的内容
18.4 宏定义#define指令
18.4.1 #define一个数值
18.4.2 #define一个算式
18.4.3 几个常见的宏定义
18.5 条件编译指令#if
18.5.1 #if…#endif
18.5.2 #ifdef…#endif
18.5.3 解决头文件重复包含的问题
18.6 main函数的参数和返回值
18.6.1 main函数的参数
18.6.2 main函数的返回值
18.7 static的用法
18.7.1 static修饰变量
18.7.2 static修饰函数
第19章 面向对象编程
19.1 面向对象设计的过程
19.2 实例演示
19.2.1 需求与设计
19.2.2 写出代码框架
19.2.3 实现各个函数接口
19.3 封装
第20章 类
20.1 类和成员变量
20.1.1 了解访问修饰符
20.1.2 访问修饰符的用法
20.2 类和成员函数
20.2.1 访问修饰符的限制
20.2.2 了解this指针
20.2.3 this指针的用法
20.3 变量名字的覆盖
20.4 命名规范
20.4.1 类名的命名规范
20.4.2 成员函数的命名规范
20.4.3 成员变量的命名规范
20.5 类的封装
20.6 类的分离式写法
20.7 const对象与const函数
20.7.1 const成员函数
20.7.2 const版本与非const版本
第21章 构造与析构
21.1 引例
21.2 构造函数
21.2.1 重载构造函数
21.2.2 构造函数的调用
21.3 析构函数
21.3.1 析构函数的调用
21.3.2 在析构函数中释放资源
21.4 自动生成的构造/析构函数
21.5 默认构造函数
21.6 构造函数的初始化列表
21.6.1 参数名与成员变量名可以相同
21.6.2 成员本身也是class类型
21.6.3 混合使用两种初始化方式
21.6.4 必须使用初始化列表的情形
21.7 构造与析构的顺序
21.8 分离式写法
21.9 无名对象
21.10 构造函数与类型转换
第22章 动态创建对象
22.1 回顾malloc/free
22.2 用new/delete创建/销毁对象
22.3 new/delete与malloc/free的区别
22.4 为new指定初始化参数
22.5 默认构造函数的必要性
22.6 注意事项
第23章 继承
23.1 引例
23.2 继承的概念
23.3 访问修饰符protected
23.4 成员函数的重写
23.5 虚拟继承
23.5.1 父类指针指向子类对象
23.5.2 虚函数virtual
23.5.3 virtual析构函数
23.6 继承关系下的构造与析构
23.7 多重继承
23.8 继承函数与纯虚类
23.9 以protected/ private方式继承
第24章 拷贝构造函数
24.1 定义
24.2 拷贝构造函数的调用
24.3 默认的拷贝构造函数
24.4 定义拷贝构造函数
24.5 深度拷贝
第25章 静态成员
25.1 static定义全局变量
25.2 static定义全局函数
25.3 与普通成员的区别
25.4 static语法的特点
25.5 应用1:实例计数
25.6 应用2:单例模式
第26章 朋友成员
26.1 引例
26.2 类的朋友
26.3 friend的语法
26.4 实例
26.5 进一步讨论
第27章 重载操作符
27.1 引例
27.2 算术操作符
27.2.1 参数类型
27.2.2 加法的互换性
27.3 赋值操作符=
27.3.1 赋以不同的类型
27.3.2 深拷贝
27.3.3 相关问题及注意事项
27.3.4 检查项列表
27.4 自增操作符++与自减操作符——
27.5 关系操作符
27.6 逻辑操作符
27.7 类型转换操作符
27.8 元素操作符[]
27.9 输入输出操作符〉〉与〈〈
27.10 操作符new与delete
27.11 小结
第28章 内部类和名字空间
28.1 内部类
28.1.1 内部类的语法
28.1.2 内部类和普通类的区别
28.1.3 内部类的用途
28.1.4 内部类的分离式写法
28.1.5 内部enum类型
28.2 名字空间
28.2.1 名字空间的定义
28.2.2 分离式写法
28.2.3 using语句:解除前缀
28.2.4 名字空间里的其他类型
28.2.5 名字空间的应用场景
第29章 模板
29.1 函数模板
29.2 类模板
29.3 模板参数
29.4 实例
第30章 标准模板库
30.1 一般使用方法
30.2 向量vector
30.2.1 at/front/back
30.2.2 push_back/pop_ back/resize/clear
30.2.3 it erator/const_ iterator
30.2.4 insert/erase
30.3 list
30.3.1 push_back/pop_back/push_front/pop_front
30.3.2 size/clear
30.3.3 front/back
30.3.4 iterator
30.3.5 insert/erase
30.4 string
30.4.1 append/clear
30.4.2 size/capacity/resize/clear/length
30.4.3 at
30.4.4 字符串比较
30.4.5 字符串查找
30.4.6 substr
30.4.7 insert/replace
30.4.8 string作为函数参数
30.5 map
30.5.1 使用[]插入数据
30.5.2 使用insert插入数据
30.5.3 查找
30.5.4 遍厉
30.5.5 删除
30.6 stack
30.7 queue
第31章 异常
31.1 一个例子
31.1.1 throw
31.1.2 try…catch
31.2 try的用法
31.3 catch的用法
31.3.1 匹配所有类型
31.3.2 异常必须被捕获
31.4 throw的用法
31.5 常见问题
31.5.1 异常与错误的区别
31.5.2 不在构造函数中抛出异常
31.5.3 不在析构函数中抛出异常
31.5.4 关于finally
附录A 用VC2008创建项目
附录B 有符号整数与无符号整数
附录C 枚举类型
附录D VC2008调试方法
附录E VS2008常见问题汇总
附录F 字面常量
附录G ASCII码表
附录H 位字段
附录I typedef的用法
附录J 编码规范
附录K C++与C语言的区别
附录L 二进制、十进制与十六进制