[美] Bjarne Stroustrup《C++程序设计原理与实践》

[美] Bjarne Stroustrup《C++程序设计原理与实践》

作者:[美] Bjarne Stroustrup

出版社:机械工业出版社

出版年:2010.7

评分:8.7

ISBN:9787111303220

所属分类:网络科技

书刊介绍

内容简介

本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写具有输入、输出、计算以及简单图形显示等功能的程序。此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。

● C++初学者的权威指南。无论你是从事软件开发还是其他领域的工作,本书将为你打开程序开发之门。

● 中高级程序员的必备参考。通过观察程序设计大师如何处理编程中的各种问题,使你获得新的领悟和指引。

● 全面阐释C++基本概念和技术。与传统的C++教材相比,本书对基本概念和技术的介绍更为深入,为你编写实用、正确、易维护和有效的代码打下坚实的基础。

● 强调现代C++编程风格。本书从开篇就介绍现代C++程序设计技术,并揭示了大量关于如何使用C++标准库来简化程序设计的原理,使你快速掌握实用编成技巧。

● 配套教辅资源丰富。本书网站(www.stroustrup.com/Programming)提供了丰富的辅助资料,包括实例源码、PPT、勘误等。

作品目录

出版者的话

译者序

前言

第0章致读者

01本书结构

011一般方法

012简单练习、 习题等

013进阶学习

02讲授和学习本书的方法

021本书内容顺序的安排

022程序设计和程序设计语言

023可移植性

03程序设计和计算机科学

04创造性和问题求解

05反馈方法

06参考文献

07作者简介

第1章计算机、 人与程序设计

11介绍

12软件

13人

14计算机科学

15计算机已无处不在

151有屏幕和没有屏幕

152船舶

153电信

154医疗

155信息领域

156一种垂直的视角

157与C++程序设计有何联系

16程序员的理想

第一部分基 本 知 识

第2章Hello, World!

21程序

22经典的第一个程序

23编译

24链接

25编程环境

第3章对象、 类型和值

31输入

32变量

33输入和类型

34运算和运算符

35赋值和初始化

351实例: 删除重复单词

36组合赋值运算符

361实例: 重复单词统计

37命名

38类型和对象

39类型安全

391安全类型转换

392不安全类型转换

第4章计算

41计算

42目标和工具

43表达式

431常量表达式

432运算符

433类型转换

44语句

441选择语句

442循环语句

45函数

451使用函数的原因

452函数声明

46向量

461向量空间增长

462一个数值计算的例子

463一个文本处理的例子

47语言特性

第5章错误

51介绍

52错误的来源

53编译时错误

531语法错误

532类型错误

533警告

54连接时错误

55运行时错误

551调用者处理错误

552被调用者处理错误

553报告错误

56异常

561错误参数

562范围错误

563输入错误

564截断错误

57逻辑错误

58估计

59调试

591实用调试技术

510前置条件和后置条件

5101后置条件

511测试

第6章编写一个程序

61一个问题

62对问题的思考

621程序设计的几个阶段

622策略

63回到计算器问题

631第一步尝试

632单词

633实现单词

634使用单词

635重新开始

64文法

641英文文法

642设计一个文法

65将文法转换为程序

651实现文法规则

652表达式

653项

654基本表达式

66试验第一个版本

67试验第二个版本

68单词流

681实现Token_stream

682读单词

683读数值

69程序结构

第7章完成一个程序

71介绍

72输入和输出

73错误处理

74处理负数

75模运算: %

76清理代码

761符号常量

762使用函数

763代码格式

764注释

77错误恢复

78变量

781变量和定义

782引入单词name

783预定义名字

784我们到达目的地了吗

第8章函数相关的技术细节

81技术细节

82声明和定义

821声明的类别

822变量和常量声明

823默认初始化

83头文件

84作用域

85函数调用和返回

851声明参数和返回类型

852返回一个值

853传值参数

854传常量引用参数

855传引用参数

856传值与传引用的对比

857参数检查和转换

858实现函数调用

86求值顺序

861表达式求值

862全局初始化

87名字空间

871using声明和using指令

第9章类相关的技术细节

91用户自定义类型

92类和成员

93接口和实现

94演化一个类

941结构和函数

942成员函数和构造函数

943保持细节私有性

944定义成员函数

945引用当前对象

946报告错误

95枚举类型

96运算符重载

97类接口

971参数类型

972拷贝

973默认构造函数

974const成员函数

975类成员和“辅助函数”

98Date类

第二部分输入和输出

第10章输入/输出流

101输入和输出

102I/O流模型

103文件

104打开文件

105读写文件

106I/O错误处理

107读取单个值

1071将程序分解为易管理的

子模块

1072将人机对话从函数中分离

108用户自定义输出操作符

109用户自定义输入操作符

1010一个标准的输入循环

1011读取结构化的文件

10111内存表示

10112读取结构化的值

10113改变表示方法

第11章定制输入/输出

111有规律的和无规律的输入和输出

112格式化输出

1121输出整数

1122输入整数

1123输出浮点数

1124精度

1125域

113文件打开和定位

1131文件打开模式

1132二进制文件

1133在文件中定位

114字符串流

115面向行的输入

116字符分类

117使用非标准分隔符

118还有很多未讨论的内容

第12章一个显示模型

121为什么要使用图形用户界面

122一个显示模型

123第一个例子

124使用GUI库

125坐标系

126形状

127使用形状类

1271图形头文件和主函数

1272一个几乎空白的窗口

1273坐标轴

1274绘制函数图

1275Polygon

1276Rectangle

1277填充

1278文本

1279图片

12710还有很多未讨论的内容

128让图形程序运行起来

1281源文件

第13章图形类

131图形类概览

132Point和Line

133Lines

134Color

135Line_style

136Open_polyline

137Closed_polyline

138Polygon

139Rectangle

1310管理未命名对象

1311Text

1312Circle

1313Ellipse

1314Marked_polyline

1315Marks

1316Mark

1317Image

第14章设计图形类

141设计原则

1411类型

1412操作

1413命名

1414可变性

142Shape类

1421一个抽象类

1422访问控制

1423绘制形状

1424拷贝和可变性

143基类和派生类

1431对象布局

1432类的派生和虚函数定义

1433覆盖

1434访问

1435纯虚函数

144面向对象程序设计的好处

第15章绘制函数图和数据图

151介绍

152绘制简单函数图

153Function类

1531默认参数

1532更多的例子

154Axis类

155近似

156绘制数据图

1561读取文件

1562一般布局

1563数据比例

1564构造数据图

第16章图形用户界面

161用户界面的选择

162“Next”按钮

163一个简单的窗口

1631回调函数

1632等待循环

164Button和其他Widget

1641Widget

1642Button

1643In_box和Out_box

1644Menu

165一个实例

166控制流的反转

167添加菜单

168调试GUI代码

第三部分数据结构和算法

第17章向量和自由空间

171介绍

172向量的基本知识

173内存、 地址和指针

1731运算符sizeof

174自由空间和指针

1741自由空间分配

1742通过指针访问数据

1743指针范围

1744初始化

1745空指针

1746自由空间释放

175析构函数

1751生成的析构函数

1752析构函数和自由空间

176访问向量元素

177指向类对象的指针

178类型混用: 无类型指针和指针

类型转换

179指针和引用

1791指针参数和引用参数

1792指针、 引用和继承

1793实例: 列表

1794列表的操作

1795列表的使用

1710this指针

17101关于Link使用的更多讨论

第18章向量和数组

181介绍

182拷贝

1821拷贝构造函数

1822拷贝赋值

1823拷贝术语

183必要的操作

1831显示构造函数

1832调试构造函数与析构函数

184访问向量元素

1841对const对象重载运算符

185数组

1851指向数组元素的指针

1852指针和数组

1853数组初始化

1854指针问题

186实例: 回文

1861使用string实现回文

1862使用数组实现回文

1863使用指针实现回文

第19章向量、 模板和异常

191问题

192改变向量大小

1921方法描述

1922reserve和capacity

1923resize

1924push_back

1925赋值

1926到现在为止我们设计的

vector类

193模板

1931类型作为模板参数

1932泛型编程

1933容器和继承

1934整数作为模板参数

1935模板参数推导

1936一般化vector类

194范围检查和异常

1941附加讨论: 设计上的考虑

1942使用宏

195资源和异常

1951潜在的资源管理问题

1952资源获取即初始化

1953保证

1954auto_ptr

1955vector类的RAII

第20章容器和迭代器

201存储和处理数据

2011处理数据

2012一般化代码

202STL建议

203序列和迭代器

2031回到实例

204链表

2041列表操作

2042迭代

205再次一般化vector

206实例: 一个简单的文本编辑器

2061处理行

2062迭代

207vector、 list和 string

2071insert 和 erase

208调整vector类达到STL版本

的功能

209调整内置数组达到STL版本

的功能

2010容器概览

20101迭代器类别

第21章算法和映射

211标准库中的算法

212最简单的算法: find()

2121一些一般的应用

213通用搜索算法: find_if()

214函数对象

2141函数对象的抽象视图

2142类成员上的谓词

215数值算法

2151累积

2152一般化accumulate()

2153内积

2154一般化inner_product()

216关联容器

2161映射

2162map概览

2163另一个map实例

2164unordered_map

2165集合

217拷贝操作

2171拷贝

2172流迭代器

2173使用集合保持顺序

2174copy_if

218排序和搜索

第四部分拓 宽 视 野

第22章理念和历史

221历史、理念和专业水平

2211程序设计语言的目标和哲学

2212编程理念

2213风格/范型

222程序设计语言历史概览

2221最早的程序语言

2222现代程序设计语言的起源

2223Algol家族

2224Simula

2225C

2226C++

2227今天的程序设计语言

2228参考资源

第23章文本处理

231文本

232字符串

233I/O流

234映射

2341实现细节

235一个问题

236正则表达式的思想

237用正则表达式进行搜索

238正则表达式语法

2381字符和特殊字符

2382字符集

2383重复

2384子模式

2385可选项

2386字符集和范围

2387正则表达式错误

239与正则表达式进行模式匹配

2310参考文献

第24章数值计算

241介绍

242大小、 精度和溢出

2421数值限制

243数组

244C 风格的多维数组

245Matrix库

2451矩阵的维和矩阵访问

2452一维矩阵

2453二维矩阵

2454矩阵I/O

2455三维矩阵

246实例: 求解线性方程组

2461经典的高斯消去法

2462选取主元

2463测试

247随机数

248标准数学函数

249复数

2410参考文献

第25章嵌入式系统程序设计

251嵌入式系统

252基本概念

2521可预测性

2522理想

2523生活在故障中

253内存管理

2531动态内存分配存在的问题

2532动态内存分配的替代方法

2533存储池实例

2534栈实例

254地址、 指针和数组

2541未经检查的类型转换

2542一个问题: 不正常的接口

2543解决方案: 接口类

2544继承和容器

255位、 字节和字

2551位和位运算

2552bitset

2553有符号数和无符号数

2554位运算

2555位域

2556实例: 简单加密

256编码规范

2561编码规范应该是怎样的

2562编码原则实例

2563实际编码规范

第26章测试

261我们想要什么

2611说明

262程序正确性证明

263测试

2631回归测试

2632单元测试

2633算法和非算法

2634系统测试

2635测试类

2636寻找不成立的假设

264测试方案设计

265调试

266性能

2661计时

267参考文献

第27章C语言

271C和C++: 兄弟

2711C/C++兼容性

2712C不支持的C++特性

2713C标准库

272函数

2721不支持函数名重载

2722函数参数类型检查

2723函数定义

2724C++调用C和C调用C++

2725函数指针

273小的语言差异

2731结构标签名字空间

2732关键字

2733定义

2734C风格类型转换

2735void*的转换

2736枚举

2737名字空间

274动态内存分配

275C风格字符串

2751C风格字符串和const

2752字节操作

2753实例: strcpy()

2754一个风格问题

276输入/输出: stdio

2761输出

2762输入

2763文件

277常量和宏

278宏

2781类函数宏

2782语法宏

2783条件编译

279实例: 侵入式容器

术语表

参考书目

第五部分附录

附录AC++语言概要

附录B标准库概要

附录CVisual Studio简要入门教程

附录D安装FLTK

附录EGUI实现

相关推荐

微信二维码