目 录
第一篇 C++过程程序设计
第1章 从最简单的案例讲述C++ 1
1.1 C++程序的结构
【案例1-1】 显示“Hello World!” 1
1.2 常量
【案例1-2】 各类常量的使用例子
1.3 变量与基本类型
【案例1-3】 取之不尽的箱子
【案例1-4】 物品存放
【案例1-5】 交换物品
1.4 运算符与表达式
【案例1-6】 单片机应用(位操作)
【案例1-7】 房间面积(*)
【案例1-8】 平分物品(/)
【案例1-9】 取余数(%)
【案例1-10】 反转整数(%)
【案例1-11】 求余下的物品数(%)
【案例1-12】 班级人数(综合)
【案例1-13】 称水果(比较)
【案例1-14】 信号灯(++ --)
【案例1-15】 篮球反弹
【案例1-16】 求被3整除的数(%+算法)
【案例1-17】 鸡兔同笼
1.5 本章练习
第2章 类型转换及流程控制
2.1 类型转换
【案例2-1】 消失的重量
【案例2-2】 游泳池的容量
【案例2-3】 显式转换
2.2 判断语句
【案例2-4】 计算年份是否为闰年(各种运算符结合)
【案例2-5】 打印ASCII码表
【案例2-6】 求完数
【案例2-7】 密码验证(if)
【案例2-8】 图书管理(if else)
2.3 循环语句
【案例2-9】 输入符合条件整数(跳出循环)
【案例2-10】 买水果小游戏(开关结构综合)
【案例2-11】 用循环计算9的9次方(for)
【案例2-12】 寻找出口小游戏(do while)
【案例2-13】 剪刀石头布
【案例2-14】 编写一个屏幕小时钟程序
【案例2-15】 屏幕变色效果——使用system()函数改变屏幕颜色
【案例2-16】 屏幕背景闪动效果的实现
【案例2-17】 终极密码
【案例2-18】 彩票游戏
【案例2-19】 随机数是否随机
【案例2-20】 抢答数学题
2.4 本章练习
第3章 数组
3.1 什么是数组
【案例3-1】 推箱子(数组元素移动)
【案例3-2】 一个简单的数据统计系统 (综合)
【案例3-3】 输出字符串的每个字符(for访问数组)
【案例3-4】 循环改写一段字符串(for访问数组)
32 一维数组
【案例3-5】 内存输出(打印数据)
【案例3-6】 一维数组的应用
【案例3-7】 整数从大到小排序(比较法)
【案例3-8】 传统杀毒软件基本实现原理(文件关键字定位)
3.3 多维数组
【案例3-9】 数据复制(复制一组数组到另一组数组)
【案例3-10】 查找二维坐标点(二维for)
【案例3-11】 查找矩阵中最大的元素(二维for)
【案例3-12】 二分法查找(二维for)
【案例3-13】 查找三维坐标点(三维for)
【案例3-14】 按位数排列
【案例3-15】 统计班上男生和女生的人数(数组随机访问)
【案例3-16】 内存指令表(数组+开关)
【案例3-17】 同学姓名册(字符数组)
【案例3-18】 图书管理系统(字符数组综合)
【案例3-19】 约瑟问题(把异教徒投入海中排法)
【案例3-20】 数组转置
【案例3-21】 0-1背包问题
第4章 字符串
4.1 操作字符串
【案例4-1】 把一个字符串截断(\0)
【案例4-2】 复制一个字符串(strcpy())
【案例4-3】 获得字符串长度(strlen())
【案例4-4】 字符串的比较(strcmp())
【案例4-5】 连接两个字符串(strcat())
【案例4-6】 将小写字符转换为大写(strupr())
【案例4-7】 比较两个string字符串
【案例4-8】 查找string的某个元素
【案例4-9】 获取string字符串的长度
【案例4-10】 提取string字符串的子串
【案例4-11】 把两个string字符串相加
【案例4-12】 string字符串与单字符相加
【案例4-13】 使用atoi()函数把字符串转换为整数
【案例4-14】 使用itoa()函数把整数转换为字符串
4.2 字符串输入输出
【案例4-15】 使用get()函数吸收缓冲区垃圾
【案例4-16】 字符串的输入(getline())
4.3 C风格字符串
【案例4-17】 string与C风格字符串转换
【案例4-18】 string字符串与C风格字符串相加
4.4 本章练习
第5章 指针与引用
5.1 指针的定义与使用
【案例5-1】 病毒特征码定位器(文件划分)
52 指针运算
【案例5-2】 将A段内存复制到B段内存(指针内存复制)
【案例5-3】 将内存的数据倒转过来(指针内存复制+算法)
【案例5-4】 将数据隐藏于内存(自定义数据访问规则)
【案例5-5】 输出本机内存数据并排序(高端先存还是低端先存)
【案例5-6】 寻找地址(指针加减法)
【案例5-7】 利用指针删除数组中的指定元素 (指针移动)
5.3 动态内存分配
【案例5-8】 简单地获取变量的字节大小(sizeof)
【案例5-9】 获取数组大小(sizeof)
【案例5-10】 错误释放指针导致程序崩溃
【案例5-11】 经典栈溢出案例
5.4 指针和const
【案例5-12】 求最长字符
【案例5-13】 DOS命令解释器(使main函数接收参数)
【案例5-14】 动态输入字符串作函数参数的实现
【案例5-15】 强制修改常量的值
【案例5-16】 防止野指针的代码
5.5 指针数组和数组指针
【案例5-17】 验证码(函数实现)
【案例5-18】 坐标指针(数组+指针)
【案例5-19】 打印内存数据(char 打印1字节)
5.6引用
【案例5-20】 万能箱子(void*)
【案例5-21】 图书名整理系统
【案例5-22】 指针引用使用问题
【案例5-23】 斗牛网络游戏
5.7 本章练习
第6章 结构、共用体与链表
6.1 结构
【案例6-1】 输出Huffman编码(结构+算法)
【案例6-2】 用C++实现定时器功能
【案例6-3】 TCP端口扫描器
【案例6-4】 密码破解器
【案例6-5】 扫描主机开放端口
【案例6-6】 删除进程
62 共用体
【案例6-7】 设计一个动态指令接收程序
【案例6-8】 图形输出算法
【案例6-9】 编写指令响应程序
6.3 结构数组和共用体数组
【案例6-10】 网络客户端开发(TCP/UDP)
【案例6-11】 网络服务端开发(TCP/UDP)
【案例6-12】 网络聊天室(基于UDP)
6.4 指向结构的指针
【案例6-13】 指向结构体变量的指针
【案例6-14】 统计数据(综合)
【案例6-15】 人工智能(随机+数据库)
【案例6-16】 最短哈密顿回路问题
【案例6-17】 扫雷游戏
6.5 链表
【案例6-18】 队列的高效历遍(++、--指针运用的高效循环)
6.6 本章练习
第7章 函数
7.1 模块化带来的好处
【案例7-1】 投骰子游戏
【案例7-2】 使用随机函数让程序带有随机性
【案例7-3】 自定义函数生成一段随机数据
72 函数定义
【案例7-4】 格式打印
【案例7-5】 定义函数求N的N次方
【案例7-6】 main()后执行代码
7.3 函数声明
【案例7-7】 姓名测试
7.4 函数的调用机制
【案例7-8】 指令接收器(字符串形参)
【案例7-9】 求班级男女的人数
【案例7-10】 分水果(使函数一次性返回N个值)
【案例7-11】 补充代码并保证变量A的值等于10
【案例7-12】 使用数组名作函数参数
【案例7-13】 让函数一次返回多个值
7.5 递归函数
【案例7-14】 阶乘计算1到100的积
【案例7-15】 互动式程序的基本框架
【案例7-16】 编写一个进制数转换器
【案例7-17】 皇后位置放置(栈+回溯法)
【案例7-18】 数学训练营(巧算24点)
7.6 函数重载
【案例7-19】 更简便的命令解释器
7.7 本章练习
第8章 关于函数的高级专题
8.1 内存使用错误剖析
【案例8-1】 释放字符串常量内存错误案例
82 重申:函数参数传递和返回机制
【案例8-2】 宝宝改名(形参引用))
8.3 函数与指针
【案例8-3】 函数映射表
8.4 函数与数组
【案例8-4】 学生成绩统计
8.5 函数与结构体、共用体及类对象
【案例8-5】 设计一个数据查询系统
【案例8-6】 一个简单加密算法的实现
【案例8-7】 解密算法的实现
【案例8-8】 使用随机函数生成密钥
【案例8-9】 设计一个完整的加密解密系统
【案例8-10】 数据包简单加密(加密技术)
8.6 函数编写的建议
【案例8-11】 补充代码使输出结果成立
【案例8-12】 清空屏幕——清屏的实现
【案例8-13】 七彩文字——改文字色
【案例8-14】 设计一个黑客界面动画
【案例8-15】 文字闪动效果的实现
8.7 本章练习
第二篇 面向对象的C++程序设计
第9章 面向对象技术基础
9.1 面向对象基本概念
【案例9-1】 营业额
【案例9-2】 命令响应
【案例9-3】 动态口令(系统时间+口令表或算法)
9.2 C++类的定义
【案例9-4】 汽车行驶里程
【案例9-5】 产量统计
【案例9-6】 走出迷宫(类+算法)
9.3 C++类的实现
【案例9-7】 求圆的面积和周长
【案例9-8】 主动连接型木马框架
【案例9-9】 反弹式穿墙木马框架)
9.4 C++类的使用
【案例9-10】 实现类自动化管理内存
【案例9-11】 定义一个ping类
【案例9-12】 利用ICMP协议实现ping
【案例9-13】 相亲速配系统
【案例9-14】 注册帐号数据库
【案例9-15】 网吧管理系统
【案例9-16】 网络购物系统
9.5 对象的创建和撤销
【案例9-17】 利用多媒体接口函数取得音量值
【案例9-18】 利用多媒体接口函数设置音量值
9.6 复制构造函数
【案例9-19】 入学登记系统
9.7 特殊数据成员
【案例9-20】一个类的对象作为另一个类的成员
9.8 特殊函数成员
【案例9-21】类的静态成员
9.9 对象的组织
【案例9-22】 对象数组
9.10 为对象态分配内存
【案例9-23】 通讯录
9.11 本章练习
第10章 关于对象的高级专题
10.1 类的作用域
【案例10-1】 类的作用域
10.2 类定义的作用域与可见域
【案例10-2】 类定义的作用域
10.3 对象生存期、作用域和可见域
【案例10-3】 超出作用域错误案例
【案例10-4】 作用域的相互屏蔽例程
10.4 类的友元
【案例10-5】 乡村生产总值
【案例10-6】 回合制对战小游戏
【案例10-7】 十二星座运气测试
10.5 运算符重载
【案例10-8】 使用C++字符串类string打印字符串
10.6 类型转换
【案例10-9】 使用成员函数检测string字符串是否非空
10.7 重载函数选择规则
【案例10-10】 函数重载陷阱案例
10.8 实体的作用域和可见域
【案例10-11】作用域
10.9 名称空间的作用域和可见域
【案例10-12】
10.10 本章练习
第11章 继承
11.1 继承与派生概述
【案例11-1】 动物对象进化
11.2 派生类
【案例11-2】 错误的模糊引用
【案例11-3】 MP3录音类
【案例11-4】 MP3录音类
11.3 多基派生
【案例11-5】 判断一个点是否在正方体内
11.4 虚基类
【案例11-6】 判断一个矩形是否成立
【案例11-7】 判断两个矩形是否存在重合
【案例11-8】 补充代码使正方体不重合且Z轴距离为10
11.5 派生类的构造函数和析构函数
【案例11-9】 卫星定位街道系统
【案例11-10】 传气球
11.6 分清继承还是组合
【案例11-11】继承和组合区别使用
11.7 基类与派生类对象间的相互转换
【案例11-12】基类与派生类之间对象指针转化
11.8 本章练习
第12章 多态
12.1 多态与虚函数
【案例12-1】 月薪发放
【案例12-2】 学生的假期生活
12.2 虚函数的访问
【案例12-3】 比谁跑得远
【案例12-4】 矩形范围
12.3 纯虚函数与抽象类
【案例12-5】 头文件重定义错误
【案例12-6】 走迷宫
12.4 虚函数引入的二义性
【案例12-7】 虚函数引入的二义性
12.5 重载、覆盖与隐藏
【案例12-8】 人体健康评估系统
12.6 本章练习
第三篇 泛型程序设计与模板库
第13章 模板
13.1 为什么定义模板
【案例13-1】 绕过形参限制
【案例13-2】 定义一个实现计算的静态模板
13.2 函数模板
【案例13-3】 求N*N的值
【案例13-4】 万能计算器
【案例13-5】 用户与管理员
【案例13-6】 模板函数的重载例程
【案例13-7】 输出内存区域的各类型数据(void*)
13.3 类模板与模板类
【案例13-8】 模拟栈空间
【案例13-9】 判断参数为字符串类型就输出字符串
【案例13-10】 模拟压栈退栈
【案例13-11】 双向链表历遍
【案例13-12】 井字游戏
【案例13-13】 贪食蛇
13.4 模板的嵌套
【案例13-14】 求AB对象成员的和
11.5 模板参数
【案例13-15】 变幻的对象——使用template定义一个类模板
13.6 隐式实例化和显式实例化
【案例13-16】 输出浮点型数据和整型数据
【案例13-17】 补充代码使输出结果成立
【案例13-18】 求AB对象的和(类参数)
【案例13-19】 显式调用析构函数案例
【案例13-20】 隐式转换错误案例
13.7 本章练习
第14章 标准模板库
14.1 理解STL
【案例14-1】 使用STL库创建容器
【案例14-2】 裁员计划——获取、删除和清空容器
【案例14-3】 图书印刷——复制元素并自动输出
14.2 使用序列式容器
【案例14-4】 成绩转换为标准分
【案例14-5】 打印容器元素的值
【案例14-6】 一个简单的学生管理系统
【案例14-7】 一个简单的计算器
【案例14-8】 一个经典的压缩算法
【案例14-9】 自定义函数实现数据压缩
【案例14-10】 自定义函数实现数据解压
【案例14-11】 高效倍增算法
【案例14-12】 推箱子
14.3 使用关联式容器
【案例14-13】 队列镜像
【案例14-14】 反暴力破解
14.4 关联式容器的成员函数操作
【案例14-15】 在容器中部插入元素
14.5 迭代器
【案例14-16】 模拟文件资源管理系统
14.6 泛型算法
【案例14-17】 反向输出
14.7 适配器
【案例14-18】 获取列队头尾
【案例14-19】 利用容器适配器实现栈功能
14.8 本章练习
第四篇 输入输出处理
第15章 输入输出与文件
15.1 输入输出概述
【案例15-1】 使用流类库输出一个文件
【案例15-2】 如何获得文件长度
【案例15-3】 使用system()函数使屏幕停止
15.2 高层I/O
【案例15-4】 读写二进制文件
【案例15-5】 读写记事本
【案例15-6】 搜索文本
【案例15-7】 猜灯谜
15.3 流类库
【案例15-8】 移动文件指针现实文件中部写入数据
15.4 输出类
【案例15-9】 输出高精度浮点数
【案例15-10】 设置输出域宽
13.5 输入类
【案例15-11】 使用get和getline函数读取C风格字符串
15.6 流状态
【案例15-12】 读取流状态
【案例15-13】 设置状态字
15.7 重载>>与<<
【案例15-14】 complex类
15.8 文件操作
【案例15-15】 设计一个简单的学生数据库类
【案例15-16】 实现程序退出自动保存数据库内容到磁盘文件
【案例15-17】 实现程序启动时自动读取数据库
【案例15-18】 编写一个学生数据管理系统V1.0
【案例15-19】 编写一个学生数据管理系统V2.0
【案例15-20】 网络文件传输
【案例15-21】 断点续传
15.9 字符串流
【案例15-22】 输入输出流之字符串流
15.10 本章练习
第16章 异常处理
16.1 编码时的防错
【案例16-1】 判断语句经典错误
【案例16-2】 函数实现把0内存删除
【案例16-3】 传送的是地址还是值
【案例16-4】 cin输入列队错误案例
【案例16-5】 数组超界访问案例
【案例16-6】 数组错用sizeof案例
【案例16-7】 sizeof产生错误
【案例16-8】 一个还没进入main()函数就崩溃的程序
【案例16-9】 main()函数的参数传递
【案例16-10】 建立链表
【案例16-11】 编写一个堆内存管理类
16.2 异常机制
【案例16-12】 类型改名——使用typedef定义类型
【案例16-13】 错误检查——使用assert宏进行检测
【案例16-14】 使用exit()函数结束程序
【案例16-15】 使用abort()函数进行异常退出
【案例16-16】 自定义异常对象
【案例16-17】 使用set_terminate()函数设置terminate()函数指针
【案例16-18】 异常处理时的析构
【案例16-19】 内存整理算法
16.3 异常发生时的内存管理
【案例16-20】 错误地释放指针导致程序崩溃
16.4 auto_ptr类
【案例16-21】 使用类自动管理指针
【案例16-22】 使用auto_ptr类智能指针管理堆内存
16.5 RTTI机制
【案例16-23】 dynamic_cast使用
16.6 类型转换操作符
【案例16-24】
16.7 本章练习