目 录 第1章 绪论 1 1.1 程序设计概述 1 1.1.1 计算机程序设计语言的发展 1 1.1.2 程序设计的发展历程 2 1.1.3 结构化程序设计 3 1.1.4 面向对象程序设计 4 1.2 C++语言发展史简介 6 1.3 C++语言的基本语法成分 7 1.3.1 字符集 7 1.3.2 标识符 8 1.3.3 关键字 8 1.3.4 运算符 9 1.3.5 分隔符 9 1.3.6 空白符 9 1.4 C++程序的开发步骤和结构 10 1.4.1 C++程序开发步骤 10 1.4.2 C++程序的结构 10 习题 14 第2章 基本数据类型、运算符与表达式 15 2.1 数据类型概述 15 2.2 常量与变量 16 2.2.1 常量 16 2.2.2 变量 17 2.3 基本数据类型 18 2.3.1 整型 18 2.3.2 实型 20 2.3.3 字符型 21 2.3.4 布尔类型 23 2.3.5 void类型 24 2.4 运算符和表达式 24 2.4.1 赋值运算符和赋值表达式 24 2.4.2 算术运算符和算术表达式 26 2.4.3 关系运算符和关系表达式 28 2.4.4 逻辑运算符和逻辑表达式 29 2.4.5 条件运算符和条件表达式 30 2.4.6 逗号运算符和逗号表达式 31 2.4.7 位运算符 31 2.5 类型转换 32 2.5.1 自动类型转换 32 2.5.2 强制类型转换 34 习题 34 第3章 结构化程序设计 36 3.1 C++语言输入输出流 36 3.1.1 C++语言无格式输入输出 36 3.1.2 C++语言格式输入输出 38 3.2 结构化程序设计概述 44 3.3 顺序结构程序设计 45 3.3.1 顺序结构 45 3.3.2 程序举例 46 3.4 选择结构程序设计 48 3.4.1 用if语句实现选择结构设计 48 3.4.2 用switch语句实现选择结构设计 52 3.5 循环结构程序设计 56 3.5.1 while语句 57 3.5.2 do-while语句 58 3.5.3 for语句 59 3.5.4 跳转语句break和continue 62 3.5.5 循环的嵌套 64 3.6 程序设计举例 66 习题 69 第4章 数组 72 4.1 一维数组 72 4.1.1 一维数组的定义 72 4.1.2 一维数组元素的引用 73 4.1.3 一维数组的初始化 74 4.1.4 一维数组程序设计举例 75 4.2 二维数组 78 4.2.1 二维数组的定义 78 4.2.2 二维数组元素的引用 79 4.2.3 二维数组的初始化 80 4.2.4 二维数组程序设计举例 82 4.3 字符数组 83 4.3.1 字符数组的定义 83 4.3.2 字符数组的初始化 83 4.3.3 字符数组的使用 85 4.3.4 字符数组程序设计举例 87 4.3.5 字符串处理函数 88 4.3.6 字符串程序设计举例 90 习题 91 第5章 函数 92 5.1 函数的定义 92 5.1.1 定义函数 92 5.1.2 函数原型 94 5.2 函数的调用 96 5.2.1 调用函数 96 5.2.2 参数传递机制 98 5.2.3 函数返回值 102 5.2.4 函数调用中的数据流 103 5.3 函数的嵌套调用 104 5.4 递归函数 108 5.5 作用域与生命期 111 5.5.1 作用域 111 5.5.2 全局变量和局部变量 114 5.5.3 生命期 118 5.6 函数的其他特性 123 5.6.1 内联(inline)函数 123 5.6.2 带默认参数的函数 124 5.6.3 函数重载 125 5.6.4 函数模板 127 习题 130 第6章 指针 133 6.1 指针的基本概念 133 6.1.1 指针的概念 133 6.1.2 指针变量的定义 134 6.1.3 指针变量运算符 135 6.1.4 指针变量的初始化与赋值 137 6.1.5 指针的运算 140 6.2 指针与数组 143 6.2.1 指向数组的指针 143 6.2.2 指针与字符数组 146 6.2.3 多级指针与指针数组 149 6.2.4 指针与多维数组 153 6.2.5 数组指针 156 6.3 指针与函数 157 6.3.1 指针作为函数参数 157 6.3.2 函数调用中数组的传递 160 6.3.3 函数指针 161 习题 164 第7章 编译预处理命令 165 7.1 宏定义 165 7.1.1 不带参数的宏定义 165 7.1.2 带参数的宏定义 167 7.2 文件包含 168 7.3 条件编译 170 习题 172 第8章 结构体、共用体和枚举类型 173 8.1 结构体类型 173 8.2 定义结构体类型变量 174 8.2.1 先定义结构体类型再定义变量 174 8.2.2 定义结构体类型的同时定义变量 175 8.2.3 直接定义结构体类型变量 175 8.2.4 结构体类型变量的初始化 177 8.3 结构体类型变量成员的引用 178 8.4 结构体数组 180 8.4.1 结构体数组的定义 180 8.4.2 结构体数组的初始化 180 8.4.3 结构体数组应用举例 181 8.5 结构体指针 182 8.5.1 指向结构体类型变量的指针 182 8.5.2 指向结构体数组的指针 183 8.5.3 用结构体变量和结构体指针作为函数参数 184 8.6 用指针处理链表 185 8.6.1 链表的概述 185 8.6.2 动态内存分配 185 8.6.3 建立单向动态链表 187 8.6.4 输出链表 189 8.6.5 对链表的删除操作 189 8.6.6 对链表的插入操作 190 8.7 共用体 193 8.7.1 共用体的概念 193 8.7.2 共用体类型和共用体类型变量的定义 193 8.7.3 共用体成员的引用方式 194 8.7.4 共用体类型的特点 194 8.8 枚举类型 195 8.8.1 枚举类型及枚举变量的定义 195 8.8.2 枚举元素的引用 196 8.8.3 用typedef声明类型 197 习题 197 第9章 面向对象程序设计基础 199 9.1 面向对象程序设计概述 199 9.1.1 面向对象方法是软件方法学的返璞归真 199 9.1.2 面向对象程序设计语言的四大家族 199 9.1.3 面向对象程序分析(OOA)与设计(OOD)的基本步骤 200 9.2 类和对象 201 9.2.1 类 201 9.2.2 对象 205 9.2.3 名字解析和this指针 207 9.3 带默认参数的成员函数和重载成员函数 207 9.4 构造函数和析构函数 209 9.4.1 构造函数 209 9.4.2 析构函数 217 9.5 对象成员和静态成员 219 9.5.1 对象成员 219 9.5.2 静态成员 220 9.6 友元 222 9.7 类模板 226 习题 229 第10章 继承与派生 230 10.1 单一继承 230 10.1.1 继承与派生 230 10.1.2 派生类的定义 230 10.1.3 类的继承方式 232 10.1.4 派生类的构造函数和析构函数 238 10.2 多重继承 241 10.2.1 多重继承的概念和定义 241 10.2.2 二义性和支配规则 241 10.2.3 赋值兼容规则 243 10.3 虚基类 243 10.3.1 虚基类的概念 243 10.3.2 多重继承的构造函数和析构函数 245 习题 247 第11章 多态性与虚函数 249 11.1 运算符重载 249 11.1.1 什么是运算符重载 249 11.1.2 用成员函数重载运算符 250 11.1.3 用友元函数重载运算符 251 11.1.4 几个常用运算符的重载 255 11.2 虚函数 258 11.2.1 为什么要引入虚函数 258 11.2.2 虚函数的定义与使用 260 11.3 纯虚函数和抽象类 263 11.3.1 纯虚函数的概念 263 11.3.2 抽象类的概念 263 11.4 虚析构函数 265 习题 266 第12章 输入输出流 268 12.1 标准输入输出流 268 12.1.1 输入输出流的概念 268 12.1.2 C++语言所有输入输出类的继承关系 268 12.2 文件输入输出流 272 12.2.1 文件的打开与关闭 272 12.2.2 文件的读写操作 275 习题 279 附录A 程序的调试与运行 280 A.1 程序的编辑、编译、连接、运行和调试 280 A.2 Visual C++ 2010学习版集成开发环境 280 A.2.1 Visual C++ 2010学习版的安装 281 A.2.2 Visual Studio 2010的首次使用及选项设置 284 A.2.3 Win32控制台应用程序的创建与执行 288 A.2.4 调试程序 292 附录B 标准字符ASCII表 294 附录C 实验 296 实验1 顺序结构程序设计 296 实验2 选择结构程序设计 296 实验3 循环结构程序设计 297 实验4 结构化程序设计综合实验 297 实验5 数组 298 实验6 函数 298 实验7 指针、指针数组 299 实验8 指针、数组与函数 299 实验9 结构体 300 实验10 面向对象程序设计 300 参考文献 301