网站购物车   | 店铺购物车  
店铺平均得分:99.38 分,再接再厉!!!【查看全部评价】
评分 40分 50分 60分 70分 80分 90分 100分
数量 2 0 0 1 2 5 379
本店铺共有 3 笔投诉记录,投诉率 1% ,低于平均投诉率 1% 【查看详细】
投诉类型
数量
比例
发货问题
3
100%
已解决
3
100%
店主称呼:川大江安校区   联系方式:购买咨询请联系我  13558697902    地址:四川省 成都市 双流县 双流县白家镇临江丽苑二期
图书分类
店铺公告
亲爱的同学们 书友们!新的学期开始啦!有木有没订教材的同学,抓紧时间哟。为了美丽中国,节约资源,减少污染,教材循环利用,是你我对地球的一点贡献。本店是实体书店带网店,书籍品种很多,好多书没上架,需要其它书籍 请留言 【书名 作者 版次 出版社】团购优惠多多 QQ1427598296 电话13558697902
温馨提示
本店是在实体书店的基础上建立的网店,实体书店与网店同步销售 ,下单前请咨询实际库存哟
本店主发韵达快递 ,韵达不到的朋友 ,请咨询客服后下单哟
店铺介绍
本店是实体书店同步网店销售,书籍品种丰富,库存保证,新书 二手书兼营,主要针对高校学生用书 下单请咨询库存哟 亲
交易帮助
第一步:选择图书放入购物车。
第二步:结算、填写收货地址。
第三步:担保付款或银行汇款。
第四步:卖家发货。
第五步:确认收货、评价。
作/译者:张基温 出版社:清华大学出版社
新概念C++程序设计大学教程(第3版)
出版日期:2018年01月
ISBN:9787302481546 [十位:7302481547]
页数:--      
定价:¥49.80
店铺售价:¥19.92 (为您节省:¥29.88
店铺库存:2
注:您当前是在入驻店铺购买,非有路网直接销售。
正在处理购买信息,请稍候……
我要买: * 如何购买
** 关于库存、售价、配送费等具体信息建议直接联系店主咨询。
联系店主:购买咨询请联系我  13558697902
本店已缴纳保证金,请放心购买!【如何赔付?】
买家对店铺的满意度评价:查看更多>>
评分
评价内容
评论人
订单图书
《新概念C++程序设计大学教程(第3版)》图书目录:
目录
第1篇 C 面向对象起步
第1单元 职员类 3
1.1 从具体对象到职员类 3
1.1.1 具体职员对象的分析与描述 3
1.1.2 Employee类的声明 4
1.1.3 C 保留字、标识符与名字空间 5
1.2 C 基本数据类型 7
1.2.1 C 算术数据类型的表示格式 7
1.2.2 C 算术数据类型的取值范围 9
1.2.3 C 运算符与算术数据类型的操作集合 10
1.3 表达式 11
1.3.1 字面值 11
1.3.2 数据实体 11
《新概念C++程序设计大学教程(第3版)》文章节选:
目录
第1篇 C 面向对象起步
第1单元 职员类 3
1.1 从具体对象到职员类 3
1.1.1 具体职员对象的分析与描述 3
1.1.2 Employee类的声明 4
1.1.3 C 保留字、标识符与名字空间 5
1.2 C 基本数据类型 7
1.2.1 C 算术数据类型的表示格式 7
1.2.2 C 算术数据类型的取值范围 9
1.2.3 C 运算符与算术数据类型的操作集合 10
1.3 表达式 11
1.3.1 字面值 11
1.3.2 数据实体 11<p>目录</p> <p>第1篇 C 面向对象起步</p> <p>第1单元 职员类 3</p> <p>1.1 从具体对象到职员类 3</p> <p>1.1.1 具体职员对象的分析与描述 3</p> <p>1.1.2 Employee类的声明 4</p> <p>1.1.3 C 保留字、标识符与名字空间 5</p> <p>1.2 C 基本数据类型 7</p> <p>1.2.1 C 算术数据类型的表示格式 7</p> <p>1.2.2 C 算术数据类型的取值范围 9</p> <p>1.2.3 C 运算符与算术数据类型的操作集合 10</p> <p>1.3 表达式 11</p> <p>1.3.1 字面值 11</p> <p>1.3.2 数据实体 11</p> <p>1.3.3 含有操作符的表达式 13</p> <p>1.3.4 表达式中的隐式数据类型转换 14</p> <p>1.4 函数 15</p> <p>1.4.1 函数的关键环节 15</p> <p>1.4.2 标准输出流cout与printEmployee() 函数 17</p> <p>1.4.3 构造函数与析构函数 18</p> <p>1.4.4 构造函数重载 21</p> <p>1.4.5 复制构造函数 22</p> <p>1.4.6 主函数 24</p> <p>1.5 程序编译 26</p> <p>1.5.1 编译预处理 26</p> <p>1.5.2 编译和连接 28</p> <p>1.5.3 多文件程序的编译 28</p> <p>1.6 知识链接 30</p> <p>1.6.1 C 字面值 30</p> <p>1.6.2 const符号常量 33</p> <p>1.6.3 指针=基类型 地址 34</p> <p>1.6.4 指向对象的指针与this 36</p> <p>1.6.5 引用 38</p> <p>习题1 39</p> <p>第2单元 简单计算器 44</p> <p>2.1 简单计算器建模 44</p> <p>2.1.1 简单计算器分析 44</p> <p>2.1.2 Calculator类的声明 44</p> <p>2.2 calculate( )函数的实现 45</p> <p>2.2.1 布尔类型与关系运算符 45</p> <p>2.2.2 用if-else结构实现成员函数calculate( ) 46</p> <p>2.2.3 用switch结构实现calculate( ) 48</p> <p>2.2.4 if-else判断结构与switch判断结构比较 49</p> <p>2.2.5 Calculator类测试 49</p> <p>2.3 C 异常处理 52</p> <p>2.3.1 程序错误 52</p> <p>2.3.2 C 异常处理机制 54</p> <p>2.3.3 C 异常处理技术 55</p> <p>2.3.4 用类作为异常类型 58</p> <p>2.3.5 捕获任何异常 62</p> <p>2.4 简单桌面计算器的改进 63</p> <p>2.4.1 使用浮点数计算的Calculator类 63</p> <p>2.4.2 标准输入流与键盘输入 64</p> <p>2.4.3 简单多项式计算的实现 67</p> <p>2.4.4 用重复结构实现任意多项式计算 72</p> <p>2.5 知识链接 74</p> <p>2.5.1 条件表达式 74</p> <p>2.5.2 局部变量 74</p> <p>2.5.3 类属变量、实例变量与局部变量的比较 76</p> <p>习题2 76</p> <p>第3单元 素数产生器 81</p> <p>3.1 问题描述与对象建模 81</p> <p>3.1.1 对象建模 81</p> <p>3.1.2 getPrimeSequence( )函数的基本思路 82</p> <p>3.2 使用isPrime( )的PrimeGenerator类实现 82</p> <p>3.2.1 用for结构实现的getPrimeSequence( )函数 82</p> <p>3.2.2 用for结构实现的isPrime( )函数 84</p> <p>3.2.3 完整的PrimeGenerator类及其测试 84</p> <p>3.3 不使用isPrime( )的PrimeGenerator类实现 85</p> <p>3.3.1 采用嵌套重复结构的getPrimeSequence( )函数 85</p> <p>3.3.2 重复结构中的continue语句和break语句 86</p> <p>3.4 数组 87</p> <p>3.4.1 数组及其定义 87</p> <p>3.4.2 数组的初始化规则 89</p> <p>3.4.3 用数组存储素数序列 90</p> <p>3.4.4 sizeof操作符 91</p> <p>3.4.5 C 11中基于容器的for循环 91</p> <p>3.4.6 数组prime的声明 92</p> <p>3.5 string类型 94</p> <p>3.6 知识链接 94</p> <p>3.6.1 C 操作符 94</p> <p>3.6.2 左值表达式与右值表达式 96</p> <p>3.6.3 具有副作用的表达式与序列点 97</p> <p>3.6.4 表达式类型的推断与获取:auto 与decltype 98</p> <p>3.6.5 类型转换构造函数与explicit关键字 101</p> <p>3.6.6 C 语句 105</p> <p>习题3 105</p> <p>第4单元 Time类 110</p> <p>4.1 Time类需求分析与操作符重载 110</p> <p>4.1.1 Time类需求分析 110</p> <p>4.1.2 关键字operator与操作符重载 111</p> <p>4.1.3 操作符 的重载 112</p> <p>4.1.4 增量操作符 的重载 113</p> <p>4.1.5 用友元函数实现<<重载 116</p> <p>4.1.6 赋值操作符=的重载 117</p> <p>4.1.7 操作符重载的基本规则 118</p> <p>4.1.8 Time类的类型转换构造函数 120</p> <p>4.2 浅复制与深复制 122</p> <p>4.2.1 数据复制及其问题 122</p> <p>4.2.2 复制构造函数再讨论 124</p> <p>4.2.3 深复制的赋值操作符重载 126</p> <p>4.3 动态内存分配 127</p> <p>4.3.1 用new进行动态内存分配 127</p> <p>4.3.2 用delete释放动态存储空间 128</p> <p>4.3.3 对象的动态存储分配 129</p> <p>4.3.4 动态内存分配时的异常处理 131</p> <p>4.4 对象数组 132</p> <p>4.4.1 对象数组的定义 132</p> <p>4.4.2 对象数组元素的访问 133</p> <p>4.4.3 数组存储空间的动态分配 134</p> <p>4.5 知识链接 134</p> <p>4.5.1 友元 134</p> <p>4.5.2 const修饰类成员与对象 138</p> <p>4.5.3 enum类型 140</p> <p>习题4 144</p> <p>第2篇 C 面向抽象程序设计</p> <p>第5单元 继承 153</p> <p>5.1 单基继承 153</p> <p>5.1.1 公司人员的类层次结构模型 153</p> <p>5.1.2 C 继承关系的建立 153</p> <p>5.1.3 在派生类中重定义基类成员函数 157</p> <p>5.1.4 基于血缘关系的访问控制——protected 159</p> <p>5.1.5 类层次结构中构造函数和析构函数的执行顺序 160</p> <p>5.2 类层次中的赋值兼容规则与里氏代换原则 163</p> <p>5.2.1 类层次中的类型赋值兼容规则 163</p> <p>5.2.2 里氏代换原则 164</p> <p>5.2.3 对象的向上转换和向下转换 164</p> <p>5.3 多基继承 165</p> <p>5.3.1 C 多基继承格式 165</p> <p>5.3.2 计算机系统=软件 硬件问题的类结构 165</p> <p>5.3.3 多基继承的歧义性问题 167</p> <p>5.3.4 虚拟基类 169</p> <p>5.4 用虚函数实现动态绑定 170</p> <p>5.4.1 画圆、三角形和矩形问题的类结构 170</p> <p>5.4.2 虚函数与动态绑定 171</p> <p>5.4.3 虚函数表与虚函数规则 173</p> <p>5.4.4 override和final 175</p> <p>5.4.5 纯虚函数与抽象类 177</p> <p>5.5 运行时类型鉴别 179</p> <p>5.5.1 RTTI概述 179</p> <p>5.5.2 dynamic_cast 179</p> <p>5.5.3 type_info类与typeid操作符 185</p> <p>习题5 188</p> <p> </p> <p>第6单元 C 程序结构优化 195</p> <p>6.1 面向对象程序设计的几个原则 195</p> <p>6.1.1 引言 195</p> <p>6.1.2 从可重用说起:合成/聚合优先原则 197</p> <p>6.1.3 从可维护性说起:开闭原则 199</p> <p>6.1.4 面向抽象原则 201</p> <p>6.1.5 单一职责原则 207</p> <p>6.1.6 接口分离原则 208</p> <p>6.1.7 不要和陌生人说话 212</p> <p>6.2 GoF设计模式举例:工厂模式 214</p> <p>6.2.1 概述 214</p> <p>6.2.2 简单工厂模式 215</p> <p>6.2.3 工厂方法模式 217</p> <p>习题6 219</p> <p>第3篇 C 泛型程序设计</p> <p>第7单元 模板 223</p> <p>7.1 算法抽象模板--函数模板 223</p> <p>7.1.1 从函数重载到函数模板 223</p> <p>7.1.2 函数模板的实例化与具体化 224</p> <p>7.2 数据抽象模板--类模板 227</p> <p>7.2.1 类模板的定义 227</p> <p>7.2.2 类模板的实例化与具体化 228</p> <p>7.2.3 类模板的使用 230</p> <p>7.2.4 类模板实例化时的异常处理 231</p> <p>7.2.5 实例:MyVector模板类的设计 232</p> <p>习题7 236</p> <p>第8单元 STL编程 242</p> <p>8.1 STL概述 242</p> <p>8.1.1 容器 242</p> <p>8.1.2 迭代器 244</p> <p>8.1.3 容器的成员函数 247</p> <p>8.1.4 STL算法 250</p> <p>8.1.5 函数对象 253</p> <p>8.1.6 STL标准头文件 255</p> <p>8.2 扑克游戏——vector容器应用实例 256</p> <p>8.2.1 vector容器的特点 256</p> <p>8.2.2 扑克游戏对象模型 256</p> <p>8.2.3 用vector容器对象poker存储54张扑克牌 257</p> <p>8.2.4 洗牌函数设计 260</p> <p>8.2.5 整牌函数设计 263</p> <p>8.2.6 发牌函数设计 264</p> <p>8.2.7 vector操作小结 267</p> <p>8.3 list容器及其应用实例 268</p> <p>8.3.1 构建list对象及其迭代器 268</p> <p>8.3.2 操作list对象 269</p> <p>8.3.3 基于list容器的约瑟夫斯问题求解 273</p> <p>8.4 string 276</p> <p>8.4.1 字符串对象的创建与特性描述 277</p> <p>8.4.2 字符串对象的输入/输出 277</p> <p>8.4.3 字符串的迭代器与字符操作 278</p> <p>8.4.4 两个字符串间的操作 282</p> <p>8.5 stack容器 284</p> <p>8.5.1 stack及其特点 284</p> <p>8.5.2 stack的操作 284</p> <p>8.5.3 应用举例:将一个十进制整数转换为K进制数 285</p> <p>8.6 关联容器 287</p> <p>8.6.1 用结构体定义的pair类模板 287</p> <p>8.6.2 set和multiset容器 289</p> <p>8.6.3 map和multimap容器 293</p> <p>8.7 知识链接 297</p> <p>8.7.1 const_iterator 297</p> <p>8.7.2 分配器 298</p> <p>习题8 299</p> <p>第4篇 C 深入编程</p> <p>第9单元 C 实体访问探幽 305</p> <p>9.1 C 实体的基本访问属性 305</p> <p>9.1.1 变量的生命期与C 存储分配 305</p> <p>9.1.2 标识符的作用域与链接性 307</p> <p>9.2 C 变量的存储属性 309</p> <p>9.2.1 C 的extern关键字 309</p> <p>9.2.2 C 的static关键字 313</p> <p>9.3 C 名字空间域 320</p> <p>9.3.1 名字冲突与名字空间 320</p> <p>9.3.2 名字空间的使用 322</p> <p>9.3.3 无名名字空间和全局名字空间 324</p> <p>9.4 const指针与const引用 325</p> <p>9.4.1 const修饰指针 325</p> <p>9.4.2 const修饰引用 326</p> <p>9.4.3 顶层const与底层const 327</p> <p>9.5 C 11的左值引用与右值引用 329</p> <p>9.5.1 C 11的左值引用与右值引用的基本概念 329</p> <p>9.5.2 基于左值和右值概念的表达式分类 330</p> <p>9.5.3 C 引用的扩展及绑定规则 330</p> <p>9.5.4 C 11的引用折叠与模板参数推导 333</p> <p>9.6 智能指针 334</p> <p>9.6.1 智能指针及其基本原理 334</p> <p>9.6.2 auto_ptr智能指针 335</p> <p>9.6.3 Boost库的智能指针 337</p> <p>习题9 339</p> <p>第10单元 C 函数探幽 345</p> <p>10.1 C 函数调用时的参数匹配规则 345</p> <p>10.1.1 C 函数调用时的参数匹配规则 345</p> <p>10.1.2 关于函数实参的计算顺序 346</p> <p>10.1.3 函数名重载 346</p> <p>10.1.4 形参带有默认值的函数 349</p> <p>10.1.5 参数数目可变的函数 350</p> <p>10.2 参数类型 351</p> <p>10.2.1 对象参数 351</p> <p>10.2.2 指针参数 353</p> <p>10.2.3 数组参数 354</p> <p>10.2.4 左值引用参数 356</p> <p>10.2.5 const保护函数参数 359</p> <p>10.2.6 **转发 360</p> <p>10.3 函数返回 363</p> <p>10.3.1 函数返回的基本规则 363</p> <p>10.3.2 函数返回指针 363</p> <p>10.3.3 函数返回引用 364</p> <p>10.3.4 const保护函数返回值 367</p> <p>10.4 移动语义 369</p> <p>10.4.1 移动语义的提出 369</p> <p>10.4.2 移动构造函数与移动赋值操作符 369</p> <p>10.4.3 强制移动与std::move() 371</p> <p>10.5 Lambda表达式 372</p> <p>10.5.1 简单的Lambda表达式 372</p> <p>10.5.2 在方括号中加入函数对象参数 373</p> <p>习题10 375</p> <p>第11单元 C I/O流 379</p> <p>11.1 流与C 流类 379</p> <p>11.1.1 流与缓冲区 379</p> <p>11.1.2 C 流类库 380</p> <p>11.1.3 ios类声明 381</p> <p>11.2 标准流对象与标准I/O流操作 383</p> <p>11.2.1 C 标准流对象 383</p> <p>11.2.2 标准输入/输出流操作 383</p> <p>11.3 流的格式化 383</p> <p>11.3.1 ios类的格式化成员函数和格式化标志 384</p> <p>11.3.2 格式化操作符 384</p> <p>11.4 文件流 385</p> <p>11.4.1 文件流的概念及其分类 385</p> <p>11.4.2 文件操作过程 386</p> <p>11.5 流的错误状态及其处理 389</p> <p>11.5.1 流的出错状态 389</p> <p>11.5.2 测试与设置出错状态位的ios类成员函数 390</p> <p>习题11 390</p> <p>附录A C 保留字 392</p> <p>A.1 C 关键字 392</p> <p>A.2 C 替代标记 392</p> <p>A.3 C 库保留名称 393</p> <p>A.4 C 特定字 393</p> <p>附录B C 运算符的优先级别和结合方向 394</p> <p>附录C C 标准库与准标准库 396</p> <p>C.1 C 标准库头文件 396</p> <p>C.1.1 标准库中与语言支持功能相关的头文件 396</p> <p>C.1.2 支持流输入/输出的头文件 396</p> <p>C.1.3 与诊断功能相关的头文件 397</p> <p>C.1.4 定义工具函数的头文件 397</p> <p>C.1.5 支持字符串处理的头文件 397</p> <p>C.1.6 定义容器类的模板的头文件 397</p> <p>C.1.7 支持迭代器的头文件 398</p> <p>C.1.8 有关算法的头文件 398</p> <p>C.1.9 有关数值操作的头文件 398</p> <p>C.1.10 有关本地化的头文件 398</p> <p>C.2 C Boost库内容 398</p> <p>C.2.1 字符串和文本处理库 399</p> <p>C.2.2 容器库 399</p> <p>C.2.3 迭代器库 399</p> <p>C.2.4 算法库 400</p> <p>C.2.5 函数对象和高阶编程库 400</p> <p>C.2.6 泛型编程库 400</p> <p>C.2.7 模板元编程 400</p> <p>C.2.8 预处理元编程库 401</p> <p>C.2.9 并发编程库 401</p> <p>C.2.10 数学和数字库 401</p> <p>C.2.11 排错和测试库 401</p> <p>C.2.12 数据结构库 402</p> <p>C.2.13 图像处理库 402</p> <p>C.2.14 输入/输出库 402</p> <p>C.2.15 跨语言混合编程库 402</p> <p>C.2.16 内存管理库 402</p> <p>C.2.17 解析库 402</p> <p>C.2.18 编程接口库 402</p> <p>C.2.19 综合类库 403</p> <p>C.2.20 编译器问题的变通方案库 403</p> <p>参考文献 404</p> <p> </p> <p> </p> <p>·VII·</p> <p> </p> <p> </p> <p> </p>显示全部信息前 言前言
(一)
1979年,Bjarne Stroustrup(C 之父)正在准备他的博士毕业论文,他有机会使用一种称为Simula 的语言。顾名思义,Simula语言主要用于仿真。其Simula 67版被公认是**支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。于是他决定自行开发一种面向对象的语言,这就是**的C 。
笔者一直关心TIOBE社区的程序设计语言排行榜,因为它能为开发和教学人员提供一份程序设计语言的行情变化资料。图1为2002年到2017年2月之间主要TIOBE程序设计语言排行的变化情况。在这个排行榜上发生了戏剧性变化的程序设计语言就是C 。其**次戏剧性的变化发生在2004年,在这一年中它的市场份额急剧下滑。但在之后的10年间基本稳定,一直保持在第三位。本书的第1版就是在这样的情况下编写的。其第二次戏剧性变化是在本书的第1版出版之后,它先在2014年间急剧下跌,又在2015年奇迹般地回归。
<p>前言</p> <p>(一)</p> <p>1979年,Bjarne Stroustrup(C 之父)正在准备他的博士毕业论文,他有机会使用一种称为Simula 的语言。顾名思义,Simula语言主要用于仿真。其Simula 67版被公认是**支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。于是他决定自行开发一种面向对象的语言,这就是**的C 。</p> <p>笔者一直关心TIOBE社区的程序设计语言排行榜,因为它能为开发和教学人员提供一份程序设计语言的行情变化资料。图1为2002年到2017年2月之间主要TIOBE程序设计语言排行的变化情况。在这个排行榜上发生了戏剧性变化的程序设计语言就是C 。其**次戏剧性的变化发生在2004年,在这一年中它的市场份额急剧下滑。但在之后的10年间基本稳定,一直保持在第三位。本书的第1版就是在这样的情况下编写的。其第二次戏剧性变化是在本书的第1版出版之后,它先在2014年间急剧下跌,又在2015年奇迹般地回归。</p> <p> </p> <p>图1 2002年到2017年2月TIOBE程序设计语言排行变化情况</p> <p>C 的这些变化似乎有些莫名其妙,但认真地分析一下,这些变化还是可以解释的:其一是其他新兴语言(主要是C#和Object-C)对于市场份额的分割;其二则是其自身标准变化的影响。下面主要分析第二方面的因素。</p> <p>C 是Bjarne Stroustrup于1979年准备一个项目时着手开发的一种程序设计语言,1985年被市场化。C 标准委员会于1998年11月推出了其**个ISO标准(俗称C 98),2003年推出其ISO标准第2版(俗称C 03),C 11则是从2005年就开始提交,到2011年8月才发布的C 标准(俗称C 11,提交时称为C 0x)。从图1可以看出,每个标准出台到影响其市场份额有一个窗口期,这是该标准投石问路的过程。</p> <p>C 03是C 98的修正版,其初衷是修正C 98的一些不足。但是由于C 脱胎于C,遵循着C是C 子集的原则,同时Bjarne Stroustrup坚持要保持其“适合教学”及既支持面向过程又支持面向对象的多泛型特色,成就了其概念清晰、设计严密、功能强大、效率较高的优点,但也带来过于复杂(如指针)、标准库功能不足,被人称为有精英化倾向的语言。因此它比较受教育界欢迎,而程序员觉得难用。不过,在通过C 03标准之前,人们还没有认识到这些问题,反而降低了效率,加剧了其缺陷的影响,使其在2004年遭受到**次**冲击。</p> <p>2004—2005年间的滑铁卢之惨使C 的设计者和标准制定者开始清醒起来,将指导思想修订如下。</p> <p>(1)维持与C 98,可能的话还有与C语言之间的兼容性与稳定性。</p> <p>(2)尽可能通过标准程序库来引进新的特性,而不是扩展核心语言。</p> <p>(3)能够促进编程技术的变更优先。</p> <p>(4)改进 C 以帮助系统和程序库的设计,而不是引进只对特定应用有用的新特性。</p> <p>(5)增强类型**,给现行不**的技术提供更**的替代方案。</p> <p>(6)增强直接与硬件协同工作的性能和能力。</p> <p>(7)为现实世界中的问题提供适当的解决方案。</p> <p>(8)实行零负担原则(如果某些功能要求额外支持,那么只有在该功能被用到时这些额外的支持才被用到) 。</p> <p>(9)使C 易于教学。</p> <p>简单地说,就是技术优先、****、自由方便。这带给程序员一个全新的面貌,以至于连C 之父都说它像一种新语言。C 11成功了,它使C 摆脱了连续10年的步步下降,造就了TIOBE曲线2015年的戏剧性变化。</p> <p>如图2所示,C 11已经公布四五年了,新的C 14也已经公布,C 17也在紧锣密鼓地部署之中。但是我国的C 程序设计教学的主流还停留在原始的C 98甚至更旧的版本上。如此严重脱离实际的状况到了该做出改变的时候了。这是笔者对这本C 教材进行改编的动因之一。</p> <p> </p> <p>图2 近期C 标准修订步伐</p> <p>不过,世界万物都有惯性。要一下子全部改到C 11上,很多人还是难以接受的,并且笔者自己也还在学习消化之中。在本书中,仅仅给出了C 11的部分新特点的接口,先让大家了解一下这些性能。在适当的时候,再做较全面和深入的介绍。</p> <p>(二)</p> <p>撇开C 11和C 14不谈,仅从一般性来讲,目前的C 教学也是不尽如人意的,把C 当作C的教学模式还广泛存在。在本书的第1版中虽然做了不少努力,但还不够。</p> <p>Bjarne Stroustrup曾经感慨地说:“我不是使用支持工具进行巧妙设计的信徒,但是我强烈支持系统地使用数据抽象、面向对象编程和类属编程。不拥有支持库和模板,不进行事先的总体设计,而是埋头写下一页页的代码,这是在浪费时间,这是在给维护增加困难。”他还认为,“一个人对C 了解得越深,在写C 程序时就越难避免C 的风格,并会因此丢掉C 的某些潜在优势。”为此,他提出了以下几个相关的要点,在这些情况下做同样的事情时,在C 中存在比C中更好的处理方式。</p> <p>(1)在C 中几乎不需要用宏。用const或enum 定义显式常量,用inline避免函数调用的额外开销,用template去刻画一簇函数或者类型,用namespace 去避免名字冲突。</p> <p>(2)不用在需要变量之前去声明它,以保证立即对其进行初始化。声明可以出现在能出现语句的所有位置上,可以出现在for语句的初始化部分,也可以出现在条件中。</p> <p>(3)不要用malloc(),new 运算符能将同样的事情做得更好。对于realloc(),试一试vector()。</p> <p>(4)试着去避免void*、指针算术、联合和强制,除了在某些函数或类实现的深层之外。在大部分情况下,强制都是设计错误的指示器。如果必须使用某个显式的类型转换,设法用一个“新的强制”,设法写出一个描述自己想做的事情的更**的语句。</p> <p>(5)尽量少用数组和C风格的字符串。与传统的C风格相比,使用C 标准库string和vector常常可以简化程序设计。如果要符合C的连接规则,一个C 函数就必须被声明为具有C连接的。</p> <p>*重要的是,要将程序考虑为一组由类和对象表示的相互作用的概念,而不是一堆数据结构和一些去拨弄数据结构中二进制位的函数。</p> <p>探索如何彰显C 特色,也是本书改编的重要动因。</p> <p>(三)</p> <p>本次修改,将全书划分为4篇。</p> <p>第1篇:C 面向对象起步。用4个单元帮助初学者建立面向对象的分析问题的思维,掌握相关方法和相关知识,树立面向对象程序设计中“一切皆对象,一切来自类”的意识。</p> <p>第2篇:C 面向抽象程序设计。用两个单元帮助读者理解如何在一个程序中组织类,以及什么样的类结构才是好的程序结构。</p> <p>第3篇:C 泛型程序设计。用两个单元介绍多态性和STL。C 的泛型、通用、灵活的特点给读者的学习带来了一定乐趣,也为读者将来从事程序开发工作提供了更多便捷 方法。</p> <p>第4篇:C 深入编程。用3个单元介绍C 在名字和实体、常量、函数、I/O流等几个方面的细节,让读者在程序开发上能够做到锦上添花。进一步提升读者“程序设计=计算思维 语言艺术”的观念。</p> <p>此外,本书每个单元都围绕一个主题展开,部分单元还增添了“知识链接”部分,其目的是引申基本内容,或为以后的学习作一些铺垫。</p> <p>本书的结构体系安排是考虑了以下几个因素和写作思想的结果。</p> <p>(1)B.S的建议。</p> <p>(2)重要先学,特色优先。</p> <p>(3)思维开路,语法补充。</p> <p>(4)多层次教学需要。</p> <p>需要说明一点:本书给出的许多示例,虽然有用,但主要用于说明一种语法概念或给出一种编程思路,还不是精益求精的实用程序。</p> <p>(四)</p> <p>由J.Piaget、O.Kernberg、R.J.Sternberg、D.Katz、Vogotsgy等人创建的建构主义(constructivism)学习理论认为,知识不是通过教师传授得到的,而是学习者在一定的情境即社会文化背景下借助其他人(包括教师和学习伙伴)的帮助,利用必要的学习资料,通过意义建构的方式而获得的。在信息时代,人们获得知识的途径发生了根本性的变化,教师不再是单一的“传道、授业、解惑”者,帮助学习者构建一个良好的学习环境也成为其一个重要职责。当然,这也是现代教材的责任。本书充分考虑了这些问题。</p> <p>为了给读者创造一个良好的学习环境,本书的部分单元设置了“知识链接”栏目。这个栏目的设置可以帮助学习者对C 的机制作更深入的了解,也为精力充沛、不够消化者提供一点“加餐”。</p> <p>除了正文外,在每个单元后面都安排了“概念辨析”“代码分析”“开发实践”和“探索验证”4种自测和训练实践环节,从而建立起一个全面的学习环境。</p> <p>(1)概念辨析主要提供选择和判断两类自测题目,帮助学习者理解本单元学习过的有关概念,把当前学习内容所反映的事物尽量和自己已经知道的事物相联系,并认真思考这种联系,通过“自我协商”与“相互协商”,形成新知识的同化与顺应。</p> <p>(2)代码分析。代码阅读是程序设计者所应掌握的基本能力之一。代码分析部分的主要题型是通过阅读程序找出错误或给出程序执行结果。</p> <p>(3)开发实践。提高程序开发能力是本书的主要目标。本书在绝大多数单元后面都给出了相应的作业题目。但是,完成这些题目并非只是简单地写出其代码,而要将其看作一个“思维 语法 方法”的工程训练。因此,要求每道题的作业都要以文档的形式完成。文档中应包括以下内容。</p> <p>① 问题分析与建模。</p> <p>② 源代码设计。</p> <p>③ 测**例设计。</p> <p>④ 程序运行结果分析。</p> <p>⑤ 编程心得(包括运行中出现的问题与解决方法、对于测**例的分析、对于运行结果的分析等)。</p> <p>⑥ 文档的排版也要遵循统一的格式。</p> <p>(4)探索验证。建构主义提倡,学习者要用探索法和发现法去建构知识的意义。学习者要在意义建构的过程中主动地收集和分析有关的信息资料,对碰到的问题提出各种假设,并努力加以验证。</p> <p>(五)</p> <p>笔者从事程序设计教学近30多年。这30多年是在不断探索中走过来的。从20世纪80年代末,笔者就开始探索程序设计课程从语法体系到问题驱动的改革;到了20世纪90年代中期又在此基础上考虑让学生在学习程序设计的同时掌握程序测试技能;2003年开始考虑如何改变学习了C 而设计出的程序却是面向过程的状况。每个阶段的探索都反映在自己不同时期的相关作品中。本书则是自我认识又一次深化的表达。</p> <p>在这30多年的探索中,笔者越来越感觉到编写教材的责任很大、困难很多。要编写一本好的教材,不仅需要对本课程涉及内容有深刻的了解,还要熟悉相关领域的知识,特别是要不断探讨贯穿其中的教学理念和教育思想。所以,越到后来,就越感到自己知识和能力的不足。可是,作为一项历史性任务的研究,笔者又不愿意将之半途而废,只能硬着头皮写下去。每一次任务的完成,都得益于一些热心者的支持和帮助。在本书的写作过程中,赵忠孝教授、姚威博士、张展为博士以及张秋菊、史林娟、张有明、戴璐、张展赫、董兆军、吴灼伟(插图)等参加了有关部分的写作。在此谨表谢意。同时,一如既往地希望得到读者广泛的批评和建议,以便将这本书改得更好。</p> <p>本书就要出版了。它的出版,是笔者在这项教学改革工作中跨上的一个新的台阶。笔者衷心希望得到有关专家和读者的批评和建议,也希望能多结交一些志同道合者,把这项教学改革推向更新的境界。</p> <p> </p> <p> 张基温</p> <p> 丁酉秋于穗小海之畔</p> <p> </p> <p> </p> <p> </p> <p> </p> <p>·I·</p> <p> </p> <p> </p> <p> </p>显示全部信息免费在线读第3单元 素数产生器素数(prime number,prime)又称质数,是在大于1的整数中,除了1和它本身外,不再有别的约数的数。素数产生器的功能是输出一个自然数区间中的所有素数。3.1 问题描述与对象建模3.1.1 对象建模本例的意图是建立一个自然数区间,如图3.1所示的[11, 101]、[350, 5500]、[3, 1000]等区间内的素数序列(prime series)。把每一个正整数区间的素数序列作为一个对象,则对这个问题建模,就是考虑定义一个具有一般性的素数产生器——PrimeGenerator类。这个类的行为是产生一个素数序列的函数getPrimeSequence( )。这个类中不同对象的区别是每个对象的区间下限(lowerNaturalNumber)和区间上限(upperNaturalNumber)不同。于是,可以得到如图3.2所示的PrimeGenerator类初步模型及其声明代码。
图3.1 不同的求素数对象【代码3-1】 PrimeGenerator类初步模型声明。
class PrimeGenerator { int lowerNaturalNumber; int upperNaturalNumber;public: void getPrimeSequence ();}

3.1.2 getPrimeSequence( )函数的基本思路getPrimeSequence( )函数的功能是给出 [lowerNaturalNumber,upperNaturalNumber] 区间内的素数序列。基本思路是,从lowerNaturalNumber到upperNaturalNumber,逐一对每一个数进行测试,看其是否为素数。如果是,则输出该数(用不带回车的输出,以便显示出一个序列);否则,继续对下一个数进行测试。每次测试使用的代码相同,只是被测试的数据不同。也就是说,这样一个函数中的代码要不断重复执行,直到达到目的为止。这种程序结构称为重复结构,也称循环结构。在实现getPrimeSequence( )函数时有如下两种考虑。(1)用isPrime( )判定一个数是否为素数。为了将getPrimeSequence( )函数设计得比较简单,把测试一个数是否为素数的工作也用一个函数isPrime( )进行。所以getPrimeSequence( )函数就是重复地对区间内每个数用函数isPrime( )进行测试。isPrime( )函数用来对于某个自然数进行测试,看其是否为素数。其原型应当为:“bool isPrime(int number);”。测试一个自然数是否为素数的基本方法是:把这个数number依次用2~number/2去除,只要有一个能整除,该数就不是素数。所以,这两个函数都要采用重复结构。(2)在getPrimeSequence( )函数中直接判定一个数是否为素数。下面分别来讨论。3.2 使用isPrime( )的PrimeGenerator类实现C 有3��重复控制结构:while、do-while和for。无论哪种重复结构,都要包含如下用于控制重复过程的三部分内容:初始化部分、循环条件和修正部分。在2.4节中,已经讨论过while结构和do-while结构的用法。下面讨论用for结构实现getPrimeSequence( )和isPrime( )函数的方法。3.2.1 用for结构实现的getPrimeSequence( )函数如前所述,循环结构是通过初始化部分、循环条件和修正部分来控制循环过程的。while结构和do-while结构将这3个部分分别放在不同位置,而for结构则把这3个部分放在一起,形成如下形式:
《新概念C++程序设计大学教程(第3版)》编辑推荐与评论:
零起点,实例引导,轻松入门,逐步深入。? 凸出面向对象思维,彰显C 精彩,靠拢C 1y。? 注重面向对象的思维训练和语言艺术的发挥。? 提倡探索式学习。? 弹性大,余味长,鼓励创新,适合多层次教学。? 大题量、多类型、宽覆盖面。 
《新概念C++程序设计大学教程(第3版)》作者介绍:
张基温 研究和教学领域涉及计算机科学与技术、信息管理、信息经济学、电子政务与电子商务、服务科学,发表论文百余篇,出版著作百余种;先后担任名古屋大学访问学者,山西财经大学、江南大学、华东政法大学、华南农业大学珠江学院、常熟理工学院、福建工程学院、广西职业技术学院、晋城学院等多所大学的专职、客座或兼职教授,北京大学博雅方略城市发展与信息化研究**研究员,南京大学出版社总编顾问,太原高新技术区IT研究院实验室主任,山西省紧缺人才专家委员会副主任等职,中国信息经济学会常务理事,全国高等院校计算机基础教育研究会常务理事兼课程建设委员会副主任,中国计算机学会教育专业委员会委员,NIT考试委员会委员,江苏省计算机基础教学指导委员会委员,山西省新世纪专家学者协会副会长;为清华大学出版社、电子工业出版社、中国水利水电出版社、南京大学出版社等出版社主编了信息管理与信息系统专业、计算机实验与实践、大学生信息素养等多个系列教材,已经发表论文百余篇,出版著作百余种。在程序设计教学领域,从20世纪80年代初就开始进行有关研究和改革,尝试将软件工程方法和算法思想引入程序设计,倡导“从语法体系向问题体系转变”、“程序设计 = 思维训练 语言艺术 工程规范”,率先把设计模式及其有关原则引入到面向对象的程序设计教材中。