21天学通C++txt,chm,pdf,epub,mobi下载 作者: [美] Jesse Liberty / [美] Siddhartha Rao / [美] Bradley Jones 出版社: 人民邮电出版社 译者: 袁国忠 / 陈秋萍 出版年: 2009-8 页数: 490 定价: 55.00元 装帧: 平装 ISBN: 9787115207937 内容简介 · · · · · ·《21天学通C++(第6版)》通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等。这些内容被组织成结构合理、联系紧密的章节,每章都可在1小时内阅读完毕;每章都提供了示例程序清单,并辅以示例输出和代码分析,以阐述该章介绍的主题。为加深读者对所学内容的理解,每章末尾都提供了常见问题及其答案以及练习和测验。读者可对照附录D提供的测验和练习答案,了解自己对所学内容的掌握程度。 作者简介 · · · · · ·Siddhartha Rao,是一位微软Visual C++MVP,还是最活跃的Interllet开发社区之一Codegur的主持人。他是windows编程领域的专家,在架构设计以及使用C++和其他现代编程语言开发驱动程序和应用程序方面拥有丰富的经验。当前,他为德国的一家软件巨人工作,致力于软件管理和软件开发最佳实践。鉴于在3个国家居住和生活过,他认为自己和家人得了旅行狂热症。Siddhartha能说多种语言,闲暇期间他喜欢在全球各地旅行和摄影。 Jesse Liberty编著了大量有关软件开发的图书,其中包括C++和_NET方面的畅销书。他是LibertyAssociates公司的总裁,该公司致力于为客户提供编程、咨询和培训方面的服务。 Bradley Jones是一位微软Visual c++MvP,他身兼网站管理员、经理、编码大师、执行编辑等职,... 目录 · · · · · ·第一部分 基础知识第1章 绪论 2 1.1 C++简史 2 1.1.1 解释器和编译器 3 1.1.2 不断变化的需求和平台 3 1.1.3 过程化编程、结构化编程和面向对象编程 4 · · · · · · () 第一部分 基础知识 第1章 绪论 2 1.1 C++简史 2 1.1.1 解释器和编译器 3 1.1.2 不断变化的需求和平台 3 1.1.3 过程化编程、结构化编程和面向对象编程 4 1.1.4 面向对象编程(OOP) 4 1.1.5 C++和面向对象编程 4 1.2 C++的发展历程 5 1.3 应该先学习C语言吗 5 1.4 微软的C++托管扩展 6 1.5 ANSI标准 6 1.6 编程准备 6 1.7 开发环境 7 1.8 创建程序的步骤 7 1.8.1 用编译器生成对象文件 7 1.8.2 用链接器生成可执行文件 7 1.9 程序开发周期 8 1.10 HELLO.cpp:第一个C++程序 9 1.11 编译器初步 10 1.12 编译错误 11 1.13 总结 11 1.14 问与答 11 1.15 作业 12 1.15.1 测验 12 1.15.2 练习 12 第2章 C++程序的组成部分 13 2.1 一个简单程序 13 2.2 cout简介 14 2.3 使用标准名称空间 16 2.4 对程序进行注释 17 2.4.1 注释的类型 17 2.4.2 使用注释 18 2.4.3 有关注释的警告 18 2.5 函数 18 2.5.1 使用函数 19 2.5.2 方法和函数 21 2.6 总结 21 2.7 问与答 21 2.8 作业 21 2.8.1 测验 21 2.8.2 练习 21 第3章 使用变量和常量 23 3.1 什么是变量 23 3.1.1 将数据存储在内存中 23 3.1.2 预留内存 24 3.1.3 整型变量的大小 24 3.1.4 基本变量类型 24 3.2 定义变量 25 3.2.1 区分大小写 26 3.2.2 命名规则 26 3.2.3 关键字 27 3.3 确定变量类型占用的内存量 27 3.4 一次创建多个变量 28 3.5 给变量赋值 28 3.6 使用typedef创建别名 29 3.7 何时使用short和long 30 3.7.1 unsigned整型变量的回绕 31 3.7.2 signed整型变量的回绕 31 3.8 使用字符 32 3.8.1 字符和数字 32 3.8.2 特殊打印字符 33 3.9 常量 34 3.9.1 字面常量 34 3.9.2 符号常量 34 3.10 枚举常量 35 3.11 总结 36 3.12 问与答 37 3.13 作业 37 3.13.1 测验 37 3.13.2 练习 38 第4章 管理数组和字符串 39 4.1 什么是数组 39 4.1.1 访问数组元素 39 4.1.2 在数组末尾后写入数据 40 4.1.3 护栏柱错误 42 4.1.4 初始化数组 42 4.1.5 声明数组 43 4.2 使用多维数组 44 4.2.1 声明多维数组 44 4.2.2 初始化多维数组 44 4.3 字符数组和字符串 46 4.4 使用方法strcpy()和strncpy() 48 4.5 string类 49 4.6 总结 50 4.7 问与答 51 4.8 作业 51 4.8.1 测验 51 4.8.2 练习 51 第5章 使用表达式、语句和运算符 53 5.1 语句简介 53 5.1.1 使用空白 53 5.1.2 语句块和复合语句 54 5.2 表达式 54 5.3 使用运算符 55 5.3.1 赋值运算符 55 5.3.2 数学运算符 55 5.3.3 整数除法和求模 56 5.4 结合使用赋值运算符与数学运算符 57 5.5 递增和递减 57 5.6 理解运算符优先级 59 5.7 括号的嵌套 59 5.8 真值的本质 60 5.9 if语句 61 5.9.1 缩进风格 63 5.9.2 else语句 63 5.9.3 高级if语句 65 5.10 在嵌套if语句中使用大括号 66 5.11 使用逻辑运算符 68 5.11.1 逻辑AND运算符 68 5.11.2 逻辑OR运算符 68 5.11.3 逻辑NOT运算符 68 5.12 简化求值 68 5.13 关系运算符的优先级 69 5.14 再谈真和假 69 5.15 条件运算符(三目运算符) 70 5.16 总结 71 5.17 问与答 71 5.18 作业 71 5.18.1 测验 71 5.18.2 练习 72 第6章 使用函数组织代码 73 6.1 什么是函数 73 6.2 返回值、参数和实参 74 6.3 声明和定义函数 74 6.3.1 函数原型 74 6.3.2 定义函数 75 6.4 函数的执行 76 6.5 确定变量的作用域 77 6.5.1 局部变量 77 6.5.2 作用域为语句块的局部变量 78 6.6 参数是局部变量 79 6.6.1 全局变量 80 6.6.2 有关全局变量的注意事项 81 6.7 创建函数语句时的考虑因素 81 6.8 再谈函数实参 81 6.9 再谈返回值 82 6.10 默认参数 83 6.11 重载函数 85 6.12 函数特有的主题 87 6.12.1 内联函数 87 6.12.2 递归 89 6.13 函数的工作原理 92 6.13.1 抽象层次 92 6.13.2 划分RAM 92 6.13.3 堆栈和函数 93 6.14 总结 94 6.15 问与答 94 6.16 作业 95 6.16.1 测验 95 6.16.2 练习 95 第7章 控制程序流程 97 7.1 循环 97 7.1.1 循环的鼻祖:goto 97 7.1.2 为何避免使用goto语句 98 7.2 使用while循环 98 7.2.1 更复杂的while语句 99 7.2.2 continue和break简介 100 7.2.3 while(true)循环 102 7.3 实现do...while循环 103 7.4 使用do...while 103 7.5 for循环 105 7.5.1 高级for循环 106 7.5.2 空for循环 108 7.5.3 循环嵌套 109 7.5.4 for循环中声明的变量的作用域 110 7.6 循环小结 111 7.7 使用switch语句控制程序流程 112 7.8 总结 116 7.9 问与答 117 7.10 作业 117 7.10.1 测验 117 7.10.2 练习 117 第8章 阐述指针 119 8.1 什么是指针 119 8.1.1 内存简介 119 8.1.2 获取变量的内存地址 120 8.1.3 将变量的地址存储到指针中 120 8.1.4 指针名 121 8.1.5 获取指针指向的变量的值 121 8.1.6 使用间接运算符解除引用 122 8.1.7 指针、地址和变量 122 8.1.8 使用指针来操纵数据 123 8.1.9 查看地址 124 8.1.10 指针和数组名 125 8.1.11 数组指针和指针数组 126 8.2 为什么使用指针 127 8.3 栈和自由存储区(堆) 127 8.3.1 使用关键字new分配内存 128 8.3.2 使用关键字delete归还内存 128 8.4 再谈内存泄漏 130 8.5 在自由存储区上创建对象 130 8.6 删除自由存储区中的对象 130 8.7 迷途指针 131 8.8 使用const指针 133 8.9 总结 134 8.10 问与答 134 8.11 作业 134 8.11.1 测验 134 8.11.2 练习 135 第9章 使用引用 136 9.1 什么是引用 136 9.2 将地址运算符用于引用 137 9.3 空指针和空引用 139 9.4 按引用传递函数参数 139 9.4.1 使用指针让swap()管用 140 9.4.2 使用引用来实现swap() 141 9.5 返回多个值 142 9.6 按引用传递以提高效率 145 9.6.1 传递const指针 147 9.6.2 用引用代替指针 148 9.7 何时使用引用和指针 150 9.8 混合使用引用和指针 150 9.9 返回指向不在作用域中的对象的引用 151 9.10 总结 153 9.11 问与答 153 9.12 作业 153 9.12.1 测验 154 9.12.2 练习 154 第二部分 面向对象编程和C++基础 第10章 类和对象 156 10.1 C++是面向对象的吗 156 10.2 创建新类型 157 10.3 类和成员简介 157 10.3.1 声明类 158 10.3.2 有关命名规则的说明 158 10.3.3 定义对象 159 10.3.4 类与对象 159 10.4 访问类成员 159 10.4.1 给对象而不是类赋值 159 10.4.2 类不能有没有声明的功能 159 10.5 私有和公有 160 10.6 实现类方法 163 10.7 添加构造函数和析构函数 165 10.7.1 默认构造函数和析构函数 166 10.7.2 使用默认构造函数 166 10.8 const成员函数 168 10.9 将类声明和方法定义放在什么地方 169 10.10 内联实现 169 10.11 将其他类用作成员数据的类 171 10.12 探索结构 174 10.13 总结 174 10.14 问与答 174 10.15 作业 175 10.15.1 测验 175 10.15.2 练习 176 第11章 实现继承 177 11.1 什么是继承 177 11.1.1 继承和派生 177 11.1.2 动物世界 178 11.1.3 派生的语法 178 11.2 私有和保护 180 11.3 构造函数和析构函数的继承性 181 11.4 覆盖基类函数 186 11.4.1 隐藏基类的方法 187 11.4.2 调用基类方法 189 11.5 虚方法 190 11.5.1 虚函数的工作原理 193 11.5.2 通过基类指针访问派生类的方法 193 11.5.3 切除 194 11.5.4 创建虚析构函数 195 11.5.5 虚复制构造函数 195 11.5.6 使用虚方法的代价 198 11.6 私有继承 198 11.6.1 使用私有继承 198 11.6.2 私有继承和聚合(组合) 199 11.7 总结 200 11.8 问与答 201 11.9 作业 201 11.9.1 测验 201 11.9.2 练习 202 第12章 多态 203 12.1 单继承存在的问题 203 12.1.1 提升 205 12.1.2 向下转换 205 12.1.3 将对象添加到链表中 207 12.2 多重继承 207 12.2.1 多重继承对象的组成部分 209 12.2.2 多重继承对象中的构造函数 210 12.2.3 避免歧义 212 12.2.4 从共同基类继承 212 12.2.5 虚继承 215 12.2.6 多重继承存在的问题 217 12.2.7 混合(功能)类 217 12.3 抽象数据类型 218 12.3.1 纯虚函数 220 12.3.2 实现纯虚函数 221 12.3.3 复杂的抽象层次结构 224 12.3.4 哪些类是抽象的 226 12.4 总结 226 12.5 问与答 227 12.6 作业 227 12.6.1 测验 227 12.6.2 练习 228 第13章 运算符类型与运算符重载 229 13.1 C++中的运算符 229 13.2 单目运算符 229 13.2.1 单目运算符的类型 230 13.2.2 单目递增与单目递减运算符 230 13.2.3 解除引用运算符*与成员选择运算符-的编程 232 13.2.4 转换运算符的编程 234 13.3 双目运算符 235 13.3.1 双目运算符的类型 235 13.3.2 双目加与双目减运算符的编程 236 13.3.3 运算符+=与-=的编程 237 13.3.4 重载比较运算符 238 13.3.5 重载运算符、、=和= 241 13.3.6 下标运算符 243 13.4 operator()函数 244 13.5 不能重新定义的运算符 245 13.6 总结 245 13.7 问与答 245 13.8 作业 246 13.8.1 测验 246 13.8.2 练习 246 第14章 类型转换运算符 247 14.1 什么是类型转换 247 14.2 为何需要类型转换 247 14.3 为何有些C++程序员不喜欢C风格类型转换 248 14.4 C++类型转换运算符 248 14.4.1 使用static_cast 248 14.4.2 使用dynamic_cast和运行阶段类型识别 249 14.4.3 使用reinterpret_cast 250 14.4.4 使用const_cast 251 14.5 C++类型转换运算符存在的问题 252 14.6 总结 252 14.7 问与答 252 14.8 作业 253 第15章 宏和模板简介 254 15.1 预处理器与编译器 254 15.2 预处理器指令#define 254 15.3 宏函数 255 15.3.1 为什么要使用括号 255 15.3.2 宏与类型安全问题 256 15.3.3 宏与函数及模板之比较 256 15.3.4 内联函数 256 15.4 模板简介 258 15.4.1 模板声明语法 258 15.4.2 各种类型的模板声明 258 15.4.3 模板类 259 15.4.4 模板的实例化和具体化 259 15.4.5 模板与类型安全 259 15.4.6 使用多个参数声明模板 259 15.4.7 使用默认参数来声明模板 260 15.4.8 一个模板示例 260 15.4.9 在实际C++编程中使用模板 261 15.5 总结 262 15.6 问与答 262 15.7 作业 263 15.7.1 测验 263 15.7.2 练习 263 第三部分 学习标准模板库(STL) 第16章 标准模板库简介 266 16.1 STL容器 266 16.1.1 顺序容器 266 16.1.2 关联容器 266 16.1.3 选择正确的容器 267 16.2 STL迭代器 267 16.3 STL算法 268 16.4 使用迭代器在容器和算法之间交互 268 16.5 总结 270 16.6 问与答 270 16.7 作业 270 第17章 STL string类 271 17.1 为何需要字符串操作类 271 17.2 使用STL string类 272 17.2.1 实例化STL string及复制 272 17.2.2 访问string及其内容 273 17.2.3 字符串连接 274 17.2.4 在string中查找字符或子字符串 275 17.2.5 截短STL string 276 17.2.6 字符串反转 278 17.2.7 字符串的大小写转换 278 17.3 基于模板的STL string实现 279 17.4 总结 279 17.5 问与答 279 17.6 作业 280 17.6.1 测验 280 17.6.2 练习 280 第18章 STL动态数组类 281 18.1 std::vector的特点 281 18.2 典型的vector操作 281 18.2.1 实例化vector 281 18.2.2 在vector中插入元素 282 18.2.3 访问vector中的元素 285 18.2.4 删除vector中的元素 286 18.3 理解size()和capacity() 287 18.4 STL deque 类 288 18.5 总结 290 18.6 问与答 290 18.7 作业 290 18.7.1 测验 291 18.7.2 练习 291 第19章 STL list 292 19.1 std::list的特点 292 19.2 基本的list操作 292 19.2.1 实例化std::list对象 292 19.2.2 在list开头插入元素 293 19.2.3 在list末尾插入元素 293 19.2.4 在list中间插入元素 294 19.2.5 删除list中的元素 296 19.3 对list中元素进行反转和排序 297 19.3.1 反转元素的排列顺序 297 19.3.2 元素排序 298 19.4 总结 305 19.5 问与答 305 19.6 作业 305 19.6.1 测验 305 19.6.2 练习 305 第20章 STL set与multiset 306 20.1 简介 306 20.2 STL set和multiset的基本操作 306 20.2.1 实例化std::set对象 306 20.2.2 在STL set或multiset中插入元素 307 20.2.3 在STL set或multiset中查找元素 308 20.2.4 删除STL set或multiset中的元素 309 20.3 使用STL set和multiset的优缺点 315 20.4 总结 316 20.5 问与答 316 20.6 作业 316 20.6.1 测验 316 20.6.2 练习 316 第21章 STL map和multimap 317 21.1 简介 317 21.2 STL map和multimap的基本操作 317 21.2.1 实例化std::map对象 317 21.2.2 在STL map或multimap中插入元素 318 21.2.3 在STL map或multimap中查找元素 320 21.2.4 删除STL map或multimap中的元素 321 21.3 提供自定义的排序谓词 323 21.4 总结 325 21.5 问与答 325 21.6 作业 326 21.6.1 测验 326 21.6.2 练习 326 第四部分 再谈STL 第22章 理解函数对象 328 22.1 函数对象与谓词的概念 328 22.2 函数对象的典型用途 328 22.2.1 一元函数 328 22.2.2 一元谓词 331 22.2.3 二元函数 332 22.2.4 二元谓词 334 22.3 总结 336 22.4 问与答 336 22.5 作业 336 22.5.1 测验 336 22.5.2 练习 336 第23章 STL算法 337 23.1 什么是STL算法 337 23.2 STL算法的分类 337 23.2.1 非变序算法 337 23.2.2 变序算法 338 23.3 STL算法的应用 339 23.3.1 计算元素个数与查找元素 339 23.3.2 在集合中搜索元素或序列 340 23.3.3 将容器中的元素初始化为指定值 342 23.3.4 用for_each处理范围内的元素 344 23.3.5 使用std::transform对范围进行变换 345 23.3.6 复制和删除操作 347 23.3.7 替换值以及替换满足给定条件的元素 349 23.3.8 排序、在有序集合中搜索以及删除重复元素 350 23.3.9 将范围分区 351 23.3.10 在有序集合中插入元素 353 23.4 总结 354 23.5 问与答 354 23.6 作业 355 23.6.1 测验 355 23.6.2 练习 355 第24章 自适应容器:栈和队列 356 24.1 栈和队列的行为特征 356 24.1.1 栈 356 24.1.2 队列 356 24.2 使用STL stack类 356 24.2.1 实例化stack 357 24.2.2 stack的成员函数 357 24.3 使用STL queue类 359 24.3.1 实例化queue 359 24.3.2 queue的成员函数 359 24.4 使用STL优先级队列 361 24.4.1 实例化priority_queue类 361 24.4.2 priority_queue的成员函数 362 24.5 总结 364 24.6 问与答 364 24.7 作业 364 24.7.1 测验 364 24.7.2 练习 364 第25章 使用STL位标志 365 25.1 bitset类 365 25.2 使用std::bitset及其成员 366 25.2.1 std:bitset的运算符 366 25.2.2 std::bitset的成员方法 366 25.3 vectorbool 368 25.3.1 实例化vectorbool 368 25.3.2 使用vectorbool 369 25.4 总结 370 25.5 问与答 370 25.6 作业 370 25.6.1 测验 370 25.6.2 练习 370 第五部分 高级C++概念 第26章 理解智能指针 372 26.1 什么是智能指针 372 26.1.1 使用常规(原始)指针有何问题 372 26.1.2 智能指针有何帮助 372 26.2 智能指针是如何实现的 373 26.3 智能指针类型 374 26.3.1 深度复制 374 26.3.2 写时复制机制 375 26.3.3 引用计数智能指针 375 26.3.4 引用链接智能指针 376 26.3.5 破坏性复制 376 26.4 使用std::auto_ptr 377 26.5 流行的智能指针库 378 26.6 总结 378 26.7 问与答 379 26.8 作业 379 26.8.1 测试 379 26.8.2 练习 379 第27章 处理流 380 27.1 流概述 380 27.1.1 数据流的封装 380 27.1.2 理解缓冲技术 381 27.2 流和缓冲区 382 27.3 标准I/O对象 382 27.4 重定向标准流 382 27.5 使用cin进行输入 382 27.5.1 输入字符串 384 27.5.2 字符串的问题 384 27.5.3 的返回值 386 27.6 cin的其他成员函数 386 27.6.1 单字符输入 386 27.6.2 从标准输入读取字符串 388 27.6.3 使用cin.ignore() 390 27.6.4 查看和插入字符:peek()和putback() 391 27.7 使用cout进行输出 391 27.7.1 刷新输出 391 27.7.2 执行输出的函数 392 27.7.3 控制符、标记和格式化指令 393 27.8 流和printf()函数之比较 396 27.9 文件输入和输出 398 27.9.1 使用ofstream 398 27.9.2 条件状态 398 27.9.3 打开文件进行输入和输出 398 27.9.4 修改ofstream打开文件时的默认行为 400 27.10 二进制文件和文本文件 401 27.11 命令行处理 403 27.12 总结 405 27.13 问与答 405 27.14 作业 406 27.14.1 测验 406 27.14.2 练习 406 第28章 处理异常 407 28.1 程序中的各种错误 407 28.2 异常的基本思想 408 28.2.1 异常处理的组成部分 409 28.2.2 手工引发异常 411 28.2.3 创建异常类 412 28.3 使用try块和catch块 414 28.4 捕获异常的工作原理 415 28.4.1 使用多条catch语句 415 28.4.2 异常层次结构 417 28.5 异常中的数据及给异常对象命名 419 28.6 异常和模板 424 28.7 没有错误的异常 426 28.8 bug和调试 426 28.8.1 断点 427 28.8.2 监视点 427 28.8.3 查看内存 427 28.8.4 查看汇编代码 427 28.9 总结 427 28.10 问与答 427 28.11 作业 428 28.11.1 测验 428 28.11.2 练习 428 第29章 杂项内容 430 29.1 预处理器和编译器 430 29.2 预编译器指令#define 430 29.2.1 使用#define定义常量 431 29.2.2 将#define用于检测 431 29.2.3 预编译器命令#else 431 29.3 包含和防范多重包含 432 29.4 字符串操纵 433 29.4.1 字符串化 433 29.4.2 拼接 433 29.5 预定义的宏 433 29.6 assert()宏 434 29.6.1 使用assert()进行调试 435 29.6.2 assert()与异常之比较 435 29.6.3 副作用 435 29.6.4 类的不变量 436 29.6.5 打印中间值 439 29.7 位运算 440 29.7.1 “与”运算符 441 29.7.2 “或”运算符 441 29.7.3 “异或”运算符 441 29.7.4 “求反”运算符 441 29.7.5 设置位 441 29.7.6 清除位 441 29.7.7 反转位 442 29.7.8 位字段 442 29.8 编程风格 444 29.8.1 缩进 444 29.8.2 大括号 444 29.8.3 长代码行和函数长度 445 29.8.4 格式化switch语句 445 29.8.5 程序文本 445 29.8.6 标识符命名 446 29.8.7 名称的拼写和大写 446 29.8.8 注释 446 29.8.9 设置访问权限 447 29.8.10 类定义 447 29.8.11 包含文件 447 29.8.12 使用assert() 447 29.8.13 使用const 447 29.9 C++开发工作的下一步 447 29.9.1 从何处获得帮助和建议 448 29.9.2 相关的C++主题:托管C++、C#和微软的.NET 448 29.10 总结 448 29.11 问与答 449 29.12 作业 450 29.12.1 测验 450 29.12.2 练习 450 附录A 二进制和十六进制 451 A.1 其他进制 451 A.2 不同进制之间的转换 452 A.2.1 二进制 452 A.2.2 为什么使用二进制 453 A.2.3 位、字节和半字节 453 A.2.4 什么是KB 453 A.2.5 二进制数 454 A.3 十六进制 454 附录B C++关键字 457 附录C 运算符优先级 458 附录D 答案 459 · · · · · · () |
文字表现力极强
一个彻底的解看!
很好的一本书,大力推荐这本书
非常经典的著作