第一章 引论 1
1.1 面向过程和面向对象程序设计方法 1
1.1.1 面向过程程序设计方法 1
1.1.2 面向对象程序设计 1
1.2 C语言与C++语言 2
1.2.1 C语言 2
1.2.2 C++语言 2
1.3 面向对象的目标 3
1.4 面向对象语言的核心概念 4
1.4.1 数据封装 4
1.4.2 继承 5
1.4.3 多态性 6
1.4.4 类属 7
1.4.5 消息 8
1.5 按对象方式思维 9
1.6 面向对象的思想和方法 11
1.6.1 面向对象是一种认知方法学 11
1.6.2 面向对象与软件IC 11
1.6.3 面向对象方法与结构程序设计方法 14
1.6.4 对象是抽象数据类型的实现 15
1.6.5 面向对象的建模与UML 16
1.7 面向对象的程序设计语言 16
1.8 C++编程实践 18
1.8.1 一个简单的C++程序 18
1.8.2 开发C++程序的步骤 19
1.8.3 Visual C++集成开发环境中的程序实现 19
第二章 C++:一个更好的C 20
2.1 C++语言基础 20
2.1.1 字符集 20
2.1.2 C++的数据类型 21
2.1.3 常量和变量 22
2.1.4 运算符 24
2.1.5 基本语句 25
2.1.6 构造数据类型 30
2.1.7 指针与字符串 33
2.1.8 作用域和存储类型 34
2.2 C++的输入和输出 36
2.3 new和delete 37
2.4 注解 38
2.5 内联函数 38
2.6 const说明符 38
2.7 函数原型 41
2.8 缺省参数 42
2.9 重载函数 42
2.10 引用(reference) 43
2.11 显式类型转换 50
练习题 50
第三章 类类型 53
3.1 类与对象 53
3.1.1 类的例子 53
3.1.2 类的私有数据 58
3.1.3 C++的类 60
3.1.4 类与对象 63
3.1.5 类的定义和实现 63
3.2 构造函数和析构函数 64
3.2.1 简单的构造函数和析构函数 64
3.2.2 参数化的构造函数 67
3.2.3 重载构造函数与拷贝构造函数 69
3.2.4 类的对象的初始化 72
3.3 关键字this 74
3.4 静态成员 79
3.4.1 静态数据成员 79
3.4.2 静态成员函数 82
3.5 友元关系 83
3.5.1 友元函数 83
3.5.2 友元函数与成员函数 86
3.5.3 友元类 87
3.5.4 友元的例子 88
3.6 类类型常量 92
3.7 一个类的对象作为另一个类的成员 94
3.8 对象数组 96
3.9 指向对象的指针变量 99
3.10 类类型做参数类型 101
3.11 类属单向同质链表的例子 103
练习题 108
第四章 运算符重载 110
4.1 重载运算符 110
4.1.1 运算符重载的语法形式 111
4.1.2 一元和二元运算符 113
4.1.3 用成员函数重载运算符 115
4.1.4 用友元函数重载运算符 118
4.1.5 重载++和-- 124
4.1.6 重载赋值运算符 126
4.1.7 重载运算符()和[] 127
4.2 自由存储 131
4.2.1 new和delete的语法 131
4.2.2 new和delete典型用法 132
4.2.3 指针悬挂问题 139
4.2.4 new和delete的重载 144
4.3 类型转换 149
4.3.1 标准类型转换为类类型 150
4.3.2 类类型转换函数 152
练习题 158
第五章 派生类 160
5.1 派生类的概念 160
5.1.1 基类与派生类 160
5.1.2 为什么使用继承 160
5.1.3 保护段 165
5.1.4 基类的访问描述符 167
5.1.5 基类对象的初始化 175
5.1.6 Point类——继承的一个例子 180
5.2 多继承 186
5.2.1 多继承的概念 186
5.2.2 虚基类 189
5.3 虚函数与多态性 196
5.3.1 指向基类对象的指针指向派生类对象 197
5.3.2 异制链表 198
5.3.3 虚函数 202
5.3.4 虚析构函数 210
5.3.5 多态性的概念 211
5.3.6 纯虚函数及抽象类 211
5.3.7 Figure模块——虚函数的例子 213
5.4 继承的意义 219
5.4.1 模块的观点 219
5.4.2 类型的观点 220
练习题 222
第六章 流库 224
6.1 C++为何有自己的I/O系统 224
6.2 C++流库的结构 224
6.3 输入和输出 226
6.3.1 iostream类库的头文件 226
6.3.2 输入/输出流类和对象 227
6.3.3 istream 227
6.3.5 输出运算符“<<” 230
6.3.6 输入运算符“>>” 232
6.4 格式控制 233
6.4.1 用ios类成员函数格式化 234
6.4.2 用操纵函数控制格式 237
6.5 文件I/O 239
6.5.1 文件的打开和关闭 239
6.5.2 文件的读写 240
第七章 模板 243
7.1 类属的概念 243
7.1.1 无约束类属机制 243
7.1.2 约束类属机制 244
7.2 模板的概念 245
7.2.1 函数模板与模板函数 245
7.2.2 类模板与模板类 248
7.3 模板设计的例子 251
7.3.1 链表类模板解决方案 251
7.3.2 用模板实现块的划分 254
7.4 Container类库的结构 262
7.5 标准模板库STL概述 264
第八章 面向对象设计技术 266
8.1 什么是OOP技术 266
8.1.1 OOP技术概述 266
8.1.2 六种典型的面向对象开发方法 267
8.2 面向对象设计的直观方法 269
8.3 数据库应用的例子 271
8.3.1 问题简述 271
8.3.2 基本结构 272
8.3.3 粗略设计 272
8.3.4 进一步设计 274
8.3.5 对象的操作 277
8.3.6 设计流程图 282
8.3.7 面向对象编程 283
第九章 命名空间与异常 286
9.1 命名空间 286
9.1.1 命名空间的意义 286
9.1.2 using声明 288
9.1.3 匿名命名空间 288
9.1.4 标准命名空间std 288
9.2 异常 289
9.2.1 异常处理的基础知识 289
9.2.2 捕获所有异常 289
9.2.3 指定由函数抛出的异常 290
9.3 标准异常 291
附录 293
附录一 Visual C++集成环境使用简介 293
附录二 C#语言 304
参考文献 314