标题：C++程序设计：思想与方法
基本信息
  [1]作者： 翁惠玉    [作译者介绍] 
丛书名： 高等院校计算机教材系列 
出版社：人民邮电出版社 
ISBN：9787115268761
上架时间：2011-12-14
出版日期：2012 年1月
开本：16开
页码：1
版次：1-1
所属分类： 计算机
内容简介
《c++程序设计:思想与方法》以c++ 为语言环境，重点讲授程序设计的思想和方法，涉及过程化程序设计和面向对象程序设计，内容包括数据类型、控制结构、数组、指针、数据封装、过程封装、运算符的重载、继承、多态性和异常处理等。第2 版秉承以程序设计方法为主、程序设计语言为辅的思想，采用以问题求解引出知识点的方法，强调编程思想和知识的应用，增加了更多的习题和实例，多章都增加了“编程规范与常见错误”小节。结构更加合理，内容更加通俗易懂。
《c++程序设计:思想与方法》旨在使读者通过学习，并经过一定的训练和实践，能够掌握程序设计的方法，并具备良好的程序设计风格。本书可作为各大专院校计算机专业程序设计课程的教材，也可供从事计算机软件开发的科研人员作为参考资料。 
作译者
本书提供作译者介绍
翁惠玉 上海人，上海交通大学博士，现为上海交通大学计算机系副教授，主要从事计算机网络、数据库和信息系统的研究，并长期担任ACM班计算机科学导论、程序设计 和数据结构课程的主讲教师，其中程序设计课程于2004年被评为上海市精品课程。翁老师科研成果颇丰，多次获得上海市科技进步奖，并多次获得上海交通大学 的优秀教学奖，编写了多本教材，如《数据结构：思想与实现》和《数据结构：题解与拓展》等，还翻译了多本国外的教材。
目录
《c++程序设计:思想与方法》 
第1 章 绪论　　1 
1.1 计算机硬件　　1 
1.2 计算机软件　　2 
1.3 程序设计　　3 
1.3.1 算法设计　　3 
1.3.2 编码　　4 
1.3.3 程序的编译和调试　　5 
小结　　6 
习题　　6 
第2 章 通过例子学习　　8 
2.1 第一个程序：输出hello world 　　8 
2.1.1 注释　　8 
2.1.2 预编译　　9 
2.1.3 主程序　　10 
2.1.4 名字空间　　11 
2.2 第二个程序：计算圆的面积和周长　　11 
2.3 数据类型　　14 
2.3.1 整型　　14 
2.3.2 实型　　16 
.2.3.3 字符型　　17 
2.3.4 布尔型　　21 
2.3.5 枚举类型　　21 
2.3.6 用typedef 重新命名类型名　　23 
2.3.7 变量赋初值　　23 
2.3.8 用sizeof 了解占用的内存量　　24 
2.4 符号常量　　24 
2.5 算术运算　　25 
2.5.1 主要的算术运算符　　25 
2.5.2 各种类型的数值间的混合运算　　25 
2.5.3 整数除法和取模运算符　　 26 
2.5.4 优先级与结合性　　26 
2.5.5 数学函数库　　 26 
2.6 赋值运算　　27 
2.6.1 赋值运算符　　 27 
2.6.2 赋值时的自动类型转换　　 28 
2.6.3 赋值的嵌套　　 28 
2.6.4 多重赋值　　 28 
2.6.5 复合赋值运算　　 29 
2.7 自增和自减运算符　　 30 
2.8 强制类型转换　　 31 
2.9 数据的输入/输出　　 32 
2.9.1 数据的输入　　 32 
2.9.2 数据的输出　　 33 
2.10 编程规范及常见错误　　 33 
小结　　 34 
习题　　 34 
第3 章 逻辑思维——分支程序设计　　 38 
3.1 关系运算　　 38 
3.1.1 关系运算符　　 38 
3.1.2 关系表达式　　 39 
3.2 逻辑运算　　 39 
3.3 if 语句　　 42 
3.3.1 if 语句的形式　　 42 
3.3.2 if 语句的嵌套　　 43 
3.3.3 if 语句的应用　　 43 
3.3.4 条件表达式　　 46 
3.4 switch 语句及其应用　　 46 
3.5 编程规范及常见错误　　 52 
小结　　52 
习题　　53 
第4 章 重复控制——循环程序设计　　55 
4.1 for 循环　　55 
4.1.1 重复n 次操作　　55 
4.1.2 for 语句的进一步讨论　　58 
4.1.3 for 循环的嵌套　　58 
4.2 while 循环　　59 
4.3 do-while 循环　　62 
4.4 循环的中途退出　　63 
4.5 枚举法　　64 
4.6 贪婪法　　67 
4.7 编程规范和常见错误　　68 
小结　　69 
习题　　69 
第5 章 批量数据处理——数组　　73 
5.1 一维数组　　73 
5.1.1 一维数组的定义　　73 
5.1.2 数组元素的引用　　73 
5.1.3 一维数组的初始化　　74 
5.1.4 一维数组在内存中的表示　　74 
5.1.5 一维数组的应用　　75 
5.2 查找和排序　　77 
5.2.1 查找　　77 
5.2.2 排序　　81 
5.3 二维数组　　84 
5.3.1 二维数组的定义　　84 
5.3.2 二维数组的初始化　　84 
5.3.3 二维数组在内存中的表示　　85 
5.3.4 二维数组的应用　　85 
5.4 字符串　　88 
5.4.1 字符串的存储及初始化　　88 
5.4.2 字符串的输入/输出　　89 
5.4.3 字符串处理函数　　90 
5.4.4 字符串的应用　　90 
5.5 编程规范及常见错误　　91 
小结　　92 
习题　　92 
第6 章 过程封装——函数　　95 
6.1 函数的定义　　96 
6.1.1 return 语句　　96 
6.1.2 函数示例　　96 
6.2 函数的使用　　98 
6.2.1 函数原型的声明　　98 
6.2.2 函数的调用　　100 
6.2.3 将函数与主程序放在一起　　101 
6.2.4 函数调用过程　　102 
6.3 数组作为函数的参数　　104 
6.4 带默认值的函数　　107 
6.5 内联函数　　108 
6.6 重载函数　　109 
6.7 函数模板　　111 
6.8 变量的作用域　　112 
6.9 变量的存储类别　　114 
6.9.1 自动变量　　114 
6.9.2 静态变量　　114 
6.9.3 寄存器变量　　116 
6.9.4 外部变量　　116 
6.10 递归函数　　118 
6.10.1 递归函数的基本概念　　118 
6.10.2 递归函数的应用　　121 
6.11 基于递归的算法　　126 
6.11.1 回溯法　　126 
6.11.2 分治法　　129 
6.11.3 动态规划　　133 
6.12 编程规范及常见错误　　135 
小结　　136 
习题　　137 
第7 章 间接访问——指针　　140 
7.1 指针的概念　　140 
7.1.1 指针变量的定义　　141 
7.1.2 指针的基本操作　　141 
7.2 指针运算与数组　　145 
7.2.1 指针运算　　146 
7.2.2 用指针访问数组　　147 
7.3 指针与动态内存分配　　148 
7.3.1 动态变量的创建　　149 
7.3.2 动态变量的回收　　150 
7.3.3 内存泄漏　　150 
7.3.4 查找new 操作的失误　　150 
7.4 字符串再讨论　　151 
7.5 指针与函数　　152 
7.5.1 指针作为形式参数　　152 
7.5.2 数组名作为形式参数的再讨论　　155 
7.5.3 字符串作为函数的参数　　157 
7.5.4 返回指针的函数　　157 
7.5.5 引用与引用传递　　158 
7.5.6 返回引用的函数　　160 
7.6 指针数组与多级指针　　161 
7.6.1 指针数组　　161 
7.6.2 main 函数的参数　　162 
7.6.3 多级指针　　164 
7.7 多维数组和指向数组的指针　　165 
7.8 指向函数的指针　　167 
7.8.1 作为函数的参数　　168 
7.8.2 用于菜单选择　　169 
7.9 编程规范与常见错误　　170 
小结　　171 
习题　　172 
第8 章 数据封装——结构体　　174 
8.1 记录的概念　　174 
8.2 c++语言中记录的使用　　175 
8.2.1 结构体类型的定义　　175 
8.2.2 结构体类型的变量的定义　　176 
8.2.3 结构体类型的变量的使用　　177 
8.2.4 结构体数组　　178 
8.3 结构体作为函数的参数　　180 
8.4 链表　　182 
8.4.1 链表的概念　　182 
8.4.2 单链表的存储　　183 
8.4.3 单链表的操作　　184 
8.5 编程规范及常见错误　　189 
小结　　189 
习题　　189 
第9 章 模块化开发　　192 
9.1 自顶向下分解　　192 
9.1.1 顶层分解　　 193 
9.1.2 prn_instruction 函数的实现　　193 
9.1.3 play 函数的实现　　194 
9.1.4 get_call_from_user 函数的实现　　 195 
9.2 模块划分　　195 
9.3 设计自己的库　　 201 
9.4 编程规范及常见错误　　206 
小结　　207 
习题　　207 
第10 章 创建工具——类的定义与使用　　 209 
10.1 从过程化到面向对象　　 209 
10.1.1 抽象的过程　　209 
10.1.2 面向对象程序设计的特点　　 210 
10.1.3 库和类　　211 
10.2 类的定义　　217 
10.3 对象的使用　　221 
10.3.1 对象的定义　　221 
10.3.2 对象的操作　　222 
10.3.3 this 指针　　223 
10.3.4 对象的构造与析构　　 224 
10.4 常量对象与常量成员函数　　233 
10.5 常量数据成员　　 234 
10.6 静态数据成员与静态成员函数　　 234 
10.6.1 静态数据成员的定义　　 235 
10.6.2 静态成员函数　　 235 
10.6.3 静态常量成员　　 238 
10.7 友元　　 239 
10.8 编程规范及常见错误　　 241 
小结　　　 241 
习题　　　 241 
第11 章 运算符重载　　245 
11.1 什么是运算符重载　　245 
11.2 运算符重载的方法　　246 
11.3 几个特殊运算符的重载　　249 
11.3.1 赋值运算符的重载　　249 
11.3.2 下标运算符的重载　　251 
11.3.3 函数调用运算符重载　　252 
11.3.4 ++和--运算符的重载　　253 
11.3.5 输入/输出运算符的重载　　254 
11.3.6 重载函数的原型设计考虑　　256 
11.4 自定义类型转换函数　　257 
11.4.1 内置类型到类类型的转换　　258 
11.4.2 类类型到其他类型的转换　　258 
11.5 运算符重载的应用　　259 
11.5.1 完整的rational 类的定义和使用　　259 
11.5.2 完整的doublearray类的定义和使用　　262 
11.6 编程规范与常见错误　　265 
小结　　　266 
习题　　　266 
第12 章 组合与继承　　268 
12.1 组合　　268 
12.2 继承　　270 
12.2.1 单继承　　271 
12.2.2 基类成员在派生类中的访问特性　　272 
12.2.3 派生类对象的构造、析构与赋值操作　　274 
12.2.4 重定义基类的函数　　279 
12.2.5 派生类作为基类　　281 
12.2.6 将派生类对象隐式转换为基类对象　　282 
12.3 多态性与虚函数　　284 
12.3.1 多态性　　284 
12.3.2 虚函数　　284 
12.3.3 虚析构函数　　288 
12.4 纯虚函数和抽象类　　288 
12.4.1 纯虚函数　　288 
12.4.2 抽象类　　288 
12.5 多继承　　289 
12.5.1 多继承的格式　　289 
12.5.2 名字冲突　　290 
12.5.3 虚基类　　291 
12.6 面向对象设计范例　　291 
12.7 编程规范和常见错误　　298 
小结　　298 
习题　　298 
第13 章 泛型机制——模板　　301 
13.1 类模板的定义　　301 
13.2 类模板的实例化　　303 
13.3 模板的编译　　304 
13.4 非类型参数和参数的默认值　　304 
13.5 类模板的友元　　306 
13.5.1 普通友元　　306 
13.5.2 模板的特定实例的友元　　306 
13.6 类模板作为基类　　310 
13.7 编程规范及常见错误　　311 
小结　　311 
习题　　312 
第14 章 输入/输出与文件　　313 
14.1 流与标准库　　313 
14.2 输入/输出缓冲　　314 
14.3 基于控制台的输入/输出　　315 
14.3.1 输出流　　315 
14.3.2 输入流　　318 
14.3.3 格式化的输入/输出　　321 
14.4 基于文件的输入/输出　　324 
14.4.1 文件的概念　　324 
14.4.2 文件和流　　325 
14.4.3 文件的顺序访问　　328 
14.4.4 文件的随机处理　　330 
14.4.5 用流式文件处理含有记录的文件　　332 
14.5 基于字符串的输入/输出　　337 
14.6 编程规范及常见错误　　338 
小结　　338 
习题　　338 
第15 章 异常处理　　341 
15.1 传统的异常处理方法　　341 
15.2 异常处理机制　　341 
15.2.1 异常抛出　　342 
15.2.2 异常捕获　　343 
15.3 异常规格说明　　347 
15.4 编程规范和常见错误　　348 
小结　　349 
习题　　349 
第16 章 容器和迭代器　　 351 
16.1 容器　　 351 
16.2 迭代器　　 351 
16.3 容器和迭代器的设计示例　　352 
16.3.1 用数组实现的容器　　 352 
16.3.2 用链表实现的容器　　 355 
小结　　358 
习题　　358 
附录 ascii 表　　 359 
参考文献　　360
前言
程序设计是计算机专业十分重要的一门课程，是实践性非常强的一门课程，也应该是一门非常有趣、让学生很有成就感的课程。但在教学过程中，很多学生的反应是：课听懂了，但题不会做，以至于最后丧失了兴趣。我认为主要的问题是教学过程中过分重视程序设计语言本身，过分强调理解语言的语法，而没有把思路放在解决问题的方法上面。因此，2008年我编写了《C++程序设计：思想与方法》，并由人民邮电出版社出版。 
我校在教学中一直使用《C++程序设计：思想与方法》，在使用过程中，我发现了一些不足之处，也收集了学生和授课老师对本教材的一些意见和建议。在上海交通大学和人民邮电出版社图灵公司的支持下，我对《C++程序设计：思想与方法》一书进行了修订，并决定出版这一新版。 
第2版保持了第1版的写作风格，继续秉承以程序设计方法为主、程序设计语言为辅的思想，采用以问题求解引出知识点的方法，在介绍语言要素的同时，更多地强调编程思想，强调知识的应用，并在以下几个方面做了较大的修改。 
(1) 增加了习题量。习题是教材的重要组成部分，第1版的习题部分比较薄弱，所以在第2版中增加了较多的习题。这些习题不仅能帮助学生巩固学到的知识，更重要的是，这些习题能起到拓展知识的作用。 
(2) 多章都增加了“编程规范与常见错误”小节。在教学过程中，我发现了一些初学者常犯的错误，于是将这些错误总结起来放在相关章的最后，希望能起到提醒的作用。一个好的程序就像一篇优美的文章，让人赏心悦目。一个好的程序必须符合良好的规范，编程规范旨在指导学生如何使程序更加规范，让学生在开始学程序设计时就养成良好的习惯。 
(3) 扩充算法设计和问题求解过程方面的内容，增加了更多的实例。 
(4) 对各章内容和文字进行了细致的修改，使结构更加合理、内容更加通俗易懂。 
相信第2版会更加符合读者的需求。但由于作者水平有限，本书肯定存在很多不足，敬请读者批评指正。 
最后，我要感谢上海交通大学电信学院程序设计课程组的各位老师，我的可爱勤奋的学生们以及关心、爱护和帮助过我的朋友们。 
翁惠玉 
2011年10月