第1篇 引导篇 3
第1章 认识对象 3
1.1 问题的抽象 3
1.1.1 以功能为中心的抽象 3
1.1.2 以对象为中心的抽象 4
1.2 一切事物皆是对象 5
1.2.1 对象 5
1.2.2 类 6
1.2.3 属性、操作和方法 6
1.3 面向对象技术概述 7
1.3.1 面向对象的基本特征 7
1.3.2 面向对象的软件开发方法 10
1.3.3 面向对象的UML描述 11
1.4 C++简介 16
1.4.1 从C到C++ 17
1.4.2 简单的C++程序 18
1.4.3 C++程序结构 20
1.4.4 C++程序的上机过程 25
本章小结 26
习题1 27
第2篇 基础篇 31
第2章 发现对象和设计类 31
2.1 时钟问题 31
2.1.1 提出问题 31
2.1.2 分析问题 31
2.2 发现对象 32
2.2.1 定义属性 34
2.2.2 定义行为 36
2.3 设计类 37
2.3.1 定义类 37
2.3.2 访问权限控制 40
2.3.3 成员函数的实现方式 42
2.3.4 内联函数 44
2.4 创建对象 47
2.4.1 对象的定义(解决问题) 48
2.4.2 类成员的访问 50
2.4.3 构造函数 56
2.4.4 构造函数的重载 64
2.4.5 带默认参数的构造函数 71
2.4.6 析构函数 74
2.4.7 构造函数和析构函数的调用顺序 80
2.4.8 复制构造函数 83
2.5 对象间的数据共享问题 94
2.5.1 类的静态数据成员 94
2.5.2 静态成员的定义 95
2.5.3 静态数据成员的初始化 97
2.5.4 静态数据成员的使用 100
2.5.5 静态成员函数 102
2.6 举一反三 105
本章小结 111
常见错误 112
习题2 112
第3章 详解对象 120
3.1 多个同类对象信息管理的问题 120
3.1.1 提出问题 120
3.1.2 分析问题 120
3.2 对象的存储 121
3.2.1 变量的作用域 121
3.2.2 变量的生存期 123
3.2.3 动态内存分配 128
3.2.4 动态对象 133
3.2.5 名字空间 135
3.3 对象指针 137
3.3.1 对象指针的定义 137
3.3.2 对象指针的初始化 138
3.3.3 通过指针访问对象成员 139
3.3.4 解析应用实例 143
3.3.5 this指针 149
3.3.6 成员指针 153
3.4 对象引用 156
3.4.1 引用的概念 157
3.4.2 引用的定义 157
3.4.3 引用的作用 160
3.5 共享数据的保护 164
3.5.1 常量 164
3.5.2 const与指针 165
3.5.3 常引用 166
3.5.4 常对象 166
3.5.5 类的常成员 168
3.6 对象数组 171
3.6.1 数组的声明及使用 172
3.6.2 数组的初始化 173
3.6.3 对象数组 173
3.7 字符串对象 178
3.7.1 用字符数组存储和处理字符串 178
3.7.2 string类 179
3.8 对象成员 183
3.8.1 类的聚集与组合 183
3.8.2 对象成员的初始化 186
3.8.3 对象成员数组 187
3.9 解决问题 189
3.10 举一反三 191
本章小结 203
常见错误 204
习题3 205
第4章 派生新类 209
4.1 类层次的问题 209
4.1.1 提出问题 210
4.1.2 分析问题 210
4.2 派生与继承 211
4.2.1 派生 211
4.2.2 继承 211
4.2.3 访问控制 212
4.3 派生类 212
4.3.1 派生类定义 212
4.3.2 派生类成员的构成 213
4.3.3 派生后访问权限控制 213
4.3.4 派生类的构造函数和析构函数 219
4.4 多继承与虚拟继承 227
4.4.1 多继承派生类的定义 227
4.4.2 多继承派生类的构造函数 228
4.4.3 虚拟继承与虚基类 232
4.5 解决问题 242
4.6 举一反三 245
本章小结 249
常见错误 250
习题4 250
第5章 多态与抽象类 257
5.1 类层次的多态问题 257
5.1.1 提出问题 257
5.1.2 分析问题 257
5.2 类型兼容规则 258
5.3 多态的概念 262
5.4 多态的分类 262
5.5 联编 263
5.5.1 静态联编 263
5.5.2 动态联编 264
5.6 虚函数 265
5.6.1 虚函数的声明 265
5.6.2 虚函数的使用 265
5.6.3 虚函数表 270
5.6.4 虚析构函数 272
5.7 抽象类和纯虚函数 275
5.7.1 抽象类 275
5.7.2 纯虚函数 275
5.8 解决问题 279
5.9 举一反三 284
本章小结 291
常见错误 292
习题5 292
第6章 运算符重载与友元 295
6.1 复数的加减运算问题 295
6.1.1 提出问题 295
6.1.2 分析问题 295
6.2 运算符重载 297
6.2.1 运算符重载的定义 297
6.2.2 运算符重载的规则 302
6.3 友元 303
6.3.1 友元的作用 303
6.3.2 友元的定义 304
6.4 运算符重载的使用 310
6.4.1 运算符重载为成员函数 311
6.4.2 运算符重载为友元函数 316
6.5 解决问题 318
6.6 举一反三 320
本章小结 326
常见错误 327
习题6 327
第7章 模板——类的再抽象 330
7.1 标准模板库的设计问题 330
7.1.1 提出问题 330
7.1.2 分析问题 330
7.2 模板的概念 332
7.3 函数模板 332
7.3.1 函数模板的定义 332
7.3.2 模板函数的生成 333
7.4 类模板 334
7.4.1 类模板的定义 334
7.4.2 类模板的使用 335
7.5 解决问题 337
7.6 STL简介 341
7.6.1 STL与C++ 341
7.6.2 STL与C++标准函数库 341
7.6.3 使用STL 344
7.7 举一反三 352
本章小结 355
常见错误 355
习题7 355
第8章 输入/输出流对象 358
8.1 螺旋矩阵的输入/输出问题 358
8.1.1 提出问题 358
8.1.2 分析问题 359
8.2 流 360
8.2.1 流的概念 360
8.2.2 I/O流 360
8.2.3 I/O流类库的层次结构 360
8.2.4 I/O流类库的头文件 361
8.2.5 标准输入/输出流对象 362
8.3 无格式输入/输出 363
8.4 输入/输出的格式控制 364
8.4.1 用ios类成员函数格式化 364
8.4.2 用操作符函数格式化 369
8.5 解决问题 374
8.6 自定义类型对象的输入/输出 377
8.7 文件的输入/输出问题 379
8.7.1 提出问题 379
8.7.2 分析问题 379
8.7.3 文件的打开和关闭 380
8.7.4 解决问题 381
8.8 举一反三 384
本章小结 389
常见错误 389
习题8 390
第9章 异常处理 393
9.1 程序中潜在的异常问题 393
9.1.1 提出问题 393
9.1.2 分析问题 396
9.2 异常处理机制 396
9.2.1 传统的异常处理方法 396
9.2.2 系统层次异常处理的标准设施 397
9.3 C++中的异常处理机制 397
9.3.1 异常的抛出、检测和捕获 397
9.3.2 解决问题 399
9.3.3 异常在多层模块间的传递 401
9.3.4 异常接口声明 403
9.3.5 异常处理中析构函数的调用 404
9.3.6 异常类的层次结构 405
9.4 标准异常 408
9.5 使用异常处理应注意的几个问题 411
9.6 举一反三 414
本章小结 417
常见错误 147
习题9 417
第10章 C++面向对象程序设计 419
10.1 实用开发基础 419
10.1.1 工程文件 419
10.1.2 分块开发 419
10.2 设计类和对象 420
10.2.1 正确使用抽象 421
10.2.2 发现对象并建立对象层 421
10.2.3 定义数据成员和成员函数 422
10.2.4 设计类的原则 423
10.2.5 如何发现基类和派生类结构 424
10.3 主函数设计 425
第3篇 应用篇 429
第11章 案例解析 429
11.1 案例1 数学计算 429
11.2 案例2 大学物理不确定度计算 433
11.3 案例3 STL的应用和泛型编程 439
11.4 案例4 Windows应用程序设计 445
11.5 案例5 网络编程 449
11.6 案例6 编译程序设计 458
附录A C++语法摘要 477
A.1 词法规则 477
A.1.1 标识符 477
A.1.2 关键字 477
A.1.3 常量 477
A.1.4 变量 479
A.1.5 语句 479
A.1.6 注释 479
A.2 数据类型 479
A.2.1 基本数据类型 479
A.2.2 构造数据类型 480
A.2.3 数据类型转换 480
A.3 运算符 480
A.4 表达式 481
A.5 语句 482
A.5.1 带标号语句 482
A.5.2 表达式语句 482
A.5.3 复合语句 482
A.5.4 函数调用语句 483
A.5.5 控制语句 483
A.6 与OOP有关的关键字 485
A.7 与OOP有关的语法 485
A.7.1 类的定义 485
A.7.2 成员函数的定义 486
A.7.3 对象 486
A.7.4 构造函数和析构函数 486
A.7.5 复制构造函数 487
A.7.6 类的继承 487
A.7.7 虚基类 488
A.7.8 虚函数 488
A.8 友元函数与友元类 489
A.9 运算符重载 489
A.10 类模板 490
A.11 函数模板 490
A.12 异常处理 490
附录B C++标准库简介 492
B.1 标准头文件的包含 492
B.2 标准库的组成 492
B.3 常用标准头文件及其主要内容介绍 494
B.3.1 泛型算法简介 494
B.3.2 容器简介 497
B.3.3 迭代器简介 497
B.3.4 I/O流库简介 498
B.3.5 string类简介 499
附录C Visual C++开发环境概述 501
C.1 开发环境简介 501
C.2 开发环境的菜单功能 503
C.3 开发环境的工具栏 506
C.4 项目和项目工作区 507
附录D 调试方法简介 509
D.1 修正语法错误 509
D.2 设置断点 510
D.3 启用和终止调试器 510
D.4 控制程序运行 511
D.5 使用QuickWatch窗口查看和修改变量的值 511
D.6 Watch窗口的使用 512
D.7 Variables窗口的使用 513
附录E C++常见错误 514
参考文献 517