高质量程序设计指南 : C++ C语言 Gao zhi liang cheng xu she ji zhi nan : C++ C yu yan 🔍
林锐, 韩永泉
北京:电子工业出版社, Di 3 ban, xiu ding ban, 北京 Bei jing, 2012
中文 [zh] · PDF · 196.8MB · 2012 · 📘 非小说类图书 · 🚀/duxiu/lgli/zlib · Save
描述
本书论述了高质量软件开发方法与C++/C编程规范.全书共17章, 第1章到第4章重点介绍软件质量和基本的程序设计方法;第5章到第16章重点阐述C++/C编程风格, 面向对象程序设计方法和一些技术专题;第17章阐述STL的原理和使用方法
备用文件名
zlib/no-category/林锐, 韩永泉/高质量程序设计指南_19201643.pdf
备选标题
高质量程序设计指南 : C++/C语言 林锐, 韩永泉编著
备选作者
林锐, (1973- )
备选作者
林锐,韩永泉编著
备用出版商
Publishing House of Electronics Industry
备用出版商
电子工业出版社 Dian zi gong ye chu ban she
备用版本
China, People's Republic, China
元数据中的注释
Bookmarks: p1 (p1): 第1章 高质量软件开发之道
p1-1 (p1): 1.1 软件质量基本概念
p1-1-1 (p1): 1.1.1 如何理解软件的质量
p1-1-2 (p2): 1.1.2 提高软件质量的基本方法
p1-1-3 (p4): 1.1.3 “零缺陷”理念
p1-2 (p4): 1.2 细说软件质量属性
p1-2-1 (p4): 1.2.1 正确性
p1-2-2 (p4): 1.2.2 健壮性
p1-2-3 (p5): 1.2.3 可靠性
p1-2-4 (p6): 1.2.4 性能
p1-2-5 (p6): 1.2.5 易用性
p1-2-6 (p7): 1.2.6 清晰性
p1-2-7 (p7): 1.2.7 安全性
p1-2-8 (p8): 1.2.8 可扩展性
p1-2-9 (p8): 1.2.9 兼容性
p1-2-10 (p8): 1.2.10 可移植性
p1-3 (p9): 1.3 人们关注的不仅仅是质量
p1-3-1 (p9): 1.3.1 质量、生产率和成本之间的关系
p1-3-2 (p10): 1.3.2 软件过程改进的基本概念
p1-4 (p13): 1.4 高质量软件开发的基本方法
p1-4-1 (p13): 1.4.1 建立软件过程规范
p1-4-2 (p15): 1.4.2 复用
p1-4-3 (p16): 1.4.3 分而治之
p1-4-4 (p17): 1.4.4 优化与折中
p1-4-5 (p17): 1.4.5 技术评审
p1-4-6 (p19): 1.4.6 测试
p1-4-7 (p21): 1.4.7 质量保证
p1-4-8 (p22): 1.4.8 改错
p1-5 (p23): 1.5 关于软件开发的一些常识和思考
p1-5-1 (p23): 1.5.1 有最好的编程语言吗
p1-5-2 (p23): 1.5.2 编程是一门艺术吗
p1-5-3 (p24): 1.5.3 编程时应该多使用技巧吗
p1-5-4 (p24): 1.5.4 换更快的计算机还是换更快的算法
p1-5-5 (p24): 1.5.5 错误是否应该分等级
p1-5-6 (p25): 1.5.6 一些错误的观念
p1-6 (p25): 1.6 小结
p2 (p27): 第2章 编程语言发展简史
p2-1 (p27): 2.1 编程语言大事记
p2-2 (p31): 2.2 Ada的故事
p2-3 (p31): 2.3 C/C++发展简史
p2-4 (p32): 2.4 Borland与Microsoft之争
p2-5 (p33): 2.5 Java阵营与Microsoft的较量
p2-6 (p36): 2.6 小结
p3 (p37): 第3章 程序的基本概念
p3-1 (p37): 3.1 程序设计语言
p3-2 (p38): 3.2 语言实现
p3-3 (p40): 3.3 程序库
p3-4 (p40): 3.4 开发环境
p3-5 (p41): 3.5 程序的工作原理
p3-6 (p42): 3.6 良好的编程习惯
p4 (p45): 第4章 C++/C程序设计入门
p4-1 (p45): 4.1 C++/C程序的基本概念
p4-1-1 (p45): 4.1.1 启动函数main()
p4-1-2 (p47): 4.1.2 命令行参数
p4-1-3 (p48): 4.1.3 内部名称
p4-1-4 (p49): 4.1.4 连接规范
p4-1-5 (p51): 4.1.5 变量及其初始化
p4-1-6 (p52): 4.1.6 C Runtime Library
p4-1-7 (p52): 4.1.7 编译时和运行时的不同
p4-1-8 (p54): 4.1.8 编译单元和独立编译技术
p4-2 (p54): 4.2 基本数据类型和内存映像
p4-3 (p56): 4.3 类型转换
p4-3-1 (p56): 4.3.1 隐式转换
p4-3-2 (p58): 4.3.2 强制转换
p4-4 (p60): 4.4 标识符
p4-5 (p61): 4.5 转义序列
p4-6 (p62): 4.6 运算符
p4-7 (p63): 4.7 表达式
p4-8 (p65): 4.8 基本控制结构
p4-9 (p65): 4.9 选择(判断)结构
p4-9-1 (p66): 4.9.1 布尔变量与零值比较
p4-9-2 (p67): 4.9.2 整型变量与零值比较
p4-9-3 (p67): 4.9.3 浮点变量与零值比较
p4-9-4 (p69): 4.9.4 指针变量与零值比较
p4-9-5 (p69): 4.9.5 对if语句的补充说明
p4-9-6 (p70): 4.9.6 switch结构
p4-10 (p71): 4.10 循环(重复)结构
p4-10-1 (p72): 4.10.1 for语句的循环控制变量
p4-10-2 (p73): 4.10.2 循环语句的效率
p4-11 (p78): 4.11 结构化程序设计原理
p4-12 (p79): 4.12 goto/continue/break语句
p4-13 (p79): 4.13 示例
p5 (p85): 第5章 C++/C常量
p5-1 (p85): 5.1 认识常量
p5-1-1 (p85): 5.1.1 字面常量
p5-1-2 (p86): 5.1.2 符号常量
p5-1-3 (p87): 5.1.3 契约性常量
p5-1-4 (p87): 5.1.4 枚举常量
p5-2 (p87): 5.2 正确定义符号常量
p5-3 (p88): 5.3 const与#define的比较
p5-4 (p89): 5.4 类中的常量
p5-5 (p90): 5.5 实际应用中如何定义常量
p6 (p95): 第6章 C++/C函数设计基础
p6-1 (p95): 6.1 认识函数
p6-2 (p96): 6.2 函数原型和定义
p6-3 (p97): 6.3 函数调用方式
p6-4 (p99): 6.4 认识函数堆栈
p6-5 (p100): 6.5 函数调用规范
p6-6 (p101): 6.6 函数连接规范
p6-7 (p102): 6.7 参数传递规则
p6-8 (p104): 6.8 返回值的规则
p6-9 (p107): 6.9 函数内部实现的规则
p6-10 (p109): 6.10 存储类型及作用域规则
p6-10-1 (p109): 6.10.1 存储类型
p6-10-2 (p110): 6.10.2 作用域规则
p6-10-3 (p111): 6.10.3 连接类型
p6-11 (p113): 6.11 递归函数
p6-12 (p116): 6.12 使用断言
p6-13 (p118): 6.13 使用const提高函数的健壮性
p6-13-1 (p118): 6.13.1 用const修饰函数的参数
p6-13-2 (p119): 6.13.2 用const修饰函数的返回值
p7 (p121): 第7章 C++/C指针、数组和字符串
p7-1 (p121): 7.1 指针
p7-1-1 (p121): 7.1.1 指针的本质
p7-1-2 (p123): 7.1.2 指针的类型及其支持的运算
p7-1-3 (p125): 7.1.3 指针传递
p7-2 (p126): 7.2 数组
p7-2-1 (p126): 7.2.1 数组的本质
p7-2-2 (p128): 7.2.2 二维数组
p7-2-3 (p129): 7.2.3 数组传递
p7-2-4 (p131): 7.2.4 动态创建、初始化和删除数组的方法
p7-3 (p133): 7.3 字符数组、字符指针和字符串
p7-3-1 (p133): 7.3.1 字符数组、字符串和′\0′的关系
p7-3-2 (p134): 7.3.2 字符指针的误区
p7-3-3 (p134): 7.3.3 字符串拷贝和比较
p7-4 (p134): 7.4 函数指针
p7-5 (p137): 7.5 引用和指针的比较
p8 (p141): 第8章 C++/C高级数据类型
p8-1 (p141): 8.1 结构(struct)
p8-1-1 (p141): 8.1.1 关键字struct与class的困惑
p8-1-2 (p142): 8.1.2 使用struct
p8-1-3 (p145): 8.1.3 位域
p8-1-4 (p147): 8.1.4 成员对齐
p8-2 (p159): 8.2 联合(Union)
p8-3 (p161): 8.3 枚举(Enum)
p8-4 (p162): 8.4 文件
p9 (p165): 第9章 C++/C编译预处理
p9-1 (p165): 9.1 文件包含
p9-1-1 (p165): 9.1.1 内部包含卫哨和外部包含卫哨
p9-1-2 (p166): 9.1.2 头文件包含的合理顺序
p9-2 (p166): 9.2 宏定义
p9-3 (p169): 9.3 条件编译
p9-3-1 (p169): 9.3.1 #if、#elif和#else
p9-3-2 (p170): 9.3.2 #ifdef和#ifndef
p9-4 (p170): 9.4 #error
p9-5 (p171): 9.5 #pragma
p9-6 (p171): 9.6 #和##运算符
p9-7 (p172): 9.7 预定义符号常量
p10 (p173): 第10章 C++/C文件结构和程序版式
p10-1 (p173): 10.1 程序文件的目录结构
p10-2 (p174): 10.2 文件的结构
p10-2-1 (p174): 10.2.1 头文件的用途和结构
p10-2-2 (p175): 10.2.2 版权和版本信息
p10-2-3 (p176): 1 0.2.3 源文件结构
p10-3 (p176): 10.3 代码的版式
p10-3-1 (p176): 10.3.1 适当的空行
p10-3-2 (p177): 10.3.2 代码行及行内空格
p10-3-3 (p178): 10.3.3 长行拆分
p10-3-4 (p179): 10.3.4 对齐与缩进
p10-3-5 (p180): 10.3.5 修饰符的位置
p10-3-6 (p180): 10.3.6 注释风格
p10-3-7 (p181): 10.3.7 ADT/UDT版式
p11 (p183): 第11章 C++/C应用程序命名规则
p11-1 (p183): 11.1 共性规则
p11-2 (p184): 11.2 简单的Windows应用程序命名
p12 (p187): 第12章 C++面向对象程序设计方法概述
p12-1 (p187): 12.1 漫谈面向对象
p12-2 (p188): 12.2 对象的概念
p12-3 (p189): 12.3 信息隐藏与类的封装
p12-4 (p193): 12.4 类的继承特性
p12-5 (p199): 12.5 类的组合特性
p12-6 (p200): 12.6 动态特性
p12-6-1 (p200): 12.6.1 虚函数
p12-6-2 (p201): 12.6.2 抽象基类
p12-6-3 (p203): 12.6.3 动态绑定
p12-6-4 (p206): 12.6.4 运行时多态
p12-6-5 (p207): 12.6.5 多态数组
p12-7 (p214): 12.7 C++对象模型
p12-7-1 (p214): 12.7.1 对象的内存映像
p12-7-2 (p224): 12.7.2 隐含成员
p12-7-3 (p225): 12.7.3 C++编译器如何处理成员函数
p12-7-4 (p225): 12.7.4 C++编译器如何处理静态成员
p12-8 (p226): 12.8 小结
p13 (p229): 第13章 对象的初始化、拷贝和析构
p13-1 (p229): 13.1 构造函数与析构函数的起源
p13-2 (p230): 13.2 为什么需要构造函数和析构函数
p13-3 (p232): 13.3 构造函数的成员初始化列表
p13-4 (p234): 13.4 对象的构造和析构次序
p13-5 (p235): 13.5 构造函数和析构函数的调用时机
p13-6 (p236): 13.6 构造函数和赋值函数的重载
p13-7 (p238): 13.7 示例:类String的构造函数和析构函数
p13-8 (p239): 13.8 何时应该定义拷贝构造函数和拷贝赋值函数
p13-9 (p240): 13.9 示例:类String的拷贝构造函数和拷贝赋值函数
p13-10 (p242): 13.10 用偷懒的办法处理拷贝构造函数和拷贝赋值函数
p13-11 (p243): 13.11 如何实现派生类的基本函数
p14 (p247): 第14章 C++函数的高级特性
p14-1 (p247): 14.1 函数重载的概念
p14-1-1 (p247): 14.1.1 重载的起源
p14-1-2 (p247): 14.1.2 重载是如何实现的
p14-1-3 (p249): 14.1.3 小心隐式类型转换导致重载函数产生二义性
p14-2 (p250): 14.2 成员函数的重载、覆盖与隐藏
p14-2-1 (p250): 14.2.1 重载与覆盖
p14-2-2 (p251): 14.2.2 令人迷惑的隐藏规则
p14-2-3 (p253): 14.2.3 摆脱隐藏
p14-3 (p254): 14.3 参数的默认值
p14-4 (p255): 14.4 运算符重载
p14-4-1 (p255): 14.4.1 基本概念
p14-4-2 (p256): 14.4.2 运算符重载的特殊性
p14-4-3 (p257): 14.4.3 不能重载的运算符
p14-4-4 (p257): 14.4.4 重载+++和--
p14-5 (p259): 14.5 函数内联
p14-5-1 (p259): 14.5.1 用函数内联取代宏
p14-5-2 (p260): 14.5.2 内联函数的编程风格
p14-5-3 (p261): 14.5.3 慎用内联
p14-6 (p261): 14.6 类型转换函数
p14-7 (p264): 14.7 const成员函数
p15 (p267): 第15章 C++异常处理和RTTI
p15-1 (p267): 15.1 为什么要使用异常处理
p15-2 (p268): 15.2 C++异常处理
p15-2-1 (p268): 15.2.1 异常处理的原理
p15-2-2 (p269): 15.2.2 异常类型和异常对象
p15-2-3 (p270): 15.2.3 异常处理的语法结构
p15-2-4 (p272): 15.2.4 异常的类型匹配规则
p15-2-5 (p272): 15.2.5 异常说明及其冲突
p15-2-6 (p273): 15.2.6 当异常抛出时局部对象如何释放
p15-2-7 (p273): 15.2.7 对象构造和析构期间的异常
p15-2-8 (p275): 15.2.8 如何使用好异常处理技术
p15-2-9 (p278): 15.2.9 C+++的标准异常
p15-3 (p278): 15.3 虚函数面临的难题
p15-4 (p280): 15.4 RTTI及其构成
p15-4-1 (p280): 15.4.1 起源
p15-4-2 (p281): 15.4.2 typeid运算符
p15-4-3 (p283): 15.4.3 dynamic_cast<>运算符
p15-4-4 (p285): 15.4.4 RTTI的魅力与代价
p16 (p287): 第16章 内存管理
p16-1 (p287): 16.1 内存分配方式
p16-2 (p288): 16.2 常见的内存错误及其对策
p16-3 (p289): 16.3 指针参数是如何传递内存的
p16-4 (p291): 16.4 free和delete把指针怎么啦
p16-5 (p292): 16.5 动态内存会被自动释放吗
p16-6 (p292): 16.6 杜绝“野指针”
p16-7 (p293): 16.7 有了malloc/free为什么还要new/delete
p16-8 (p295): 16.8 malloc/free的使用要点
p16-9 (p296): 16.9 new有3种使用方式
p16-9-1 (p296): 16.9.1 plain new/delete
p16-9-2 (p297): 16.9.2 nothrow new/delete
p16-9-3 (p297): 16.9.3 placement new/delete
p16-10 (p300): 16.10 new/delete的使用要点
p16-11 (p301): 16.11 内存耗尽怎么办
p16-12 (p302): 16.12 用对象模拟指针
p16-13 (p305): 16.13 泛型指针auto_ptr
p16-14 (p306): 16.14 带有引用计数的智能指针
p16-15 (p312): 16.15 智能指针作为容器元素
p17 (p323): 第17章 学习和使用STL
p17-1 (p323): 17.1 STL简介
p17-2 (p324): 17.2 STL头文件的分布
p17-2-1 (p324): 17.2.1 容器类
p17-2-2 (p325): 17.2.2 泛型算法
p17-2-3 (p325): 17.2.3 迭代器
p17-2-4 (p325): 17.2.4 数学运算库
p17-2-5 (p325): 17.2.5 通用工具
p17-2-6 (p326): 17.2.6 其他头文件
p17-3 (p326): 17.3 容器设计原理
p17-3-1 (p326): 17.3.1 内存映像
p17-3-2 (p327): 17.3.2 存储方式和访问方式
p17-3-3 (p328): 17.3.3 顺序容器和关联式容器的比较
p17-3-4 (p331): 17.3.4 如何遍历容器
p17-3-5 (p332): 17.3.5 存储空间重分配问题
p17-3-6 (p333): 17.3.6 什么样的对象才能作为STL容器的元素
p17-4 (p334): 17.4 迭代器
p17-4-1 (p334): 17.4.1 迭代器的本质
p17-4-2 (p337): 17.4.2 迭代器失效及其危险性
p17-4-3 (p346): 17.4.3 如何在遍历容器的过程中正确删除元素
p17-5 (p347): 17.5 存储分配器
p17-6 (p349): 17.6 适配器
p17-7 (p352): 17.7 泛型算法
p17-8 (p355): 17.8 一些特殊的容器
p17-8-1 (p356): 17.8.1 string类
p17-8-2 (p356): 17.8.2 bitset并非set
p17-8-3 (p358): 17.8.3 节省存储空间的vector<bool>
p17-8-4 (p360): 17.8.4 空容器
p17-9 (p361): 17.9 STL容器特征总结
p17-10 (p364): 17.10 STL使用心得
p18 (p367): 附录A C++/C试题
p19 (p371): 附录B C++/C试题答案与评分标准
p20 (p377): 附录C 大学十年
p21 (p395): 附录D 《大学十年》后记
p22 (p397): 附录E 术语与缩写解释
p1-1 (p1): 1.1 软件质量基本概念
p1-1-1 (p1): 1.1.1 如何理解软件的质量
p1-1-2 (p2): 1.1.2 提高软件质量的基本方法
p1-1-3 (p4): 1.1.3 “零缺陷”理念
p1-2 (p4): 1.2 细说软件质量属性
p1-2-1 (p4): 1.2.1 正确性
p1-2-2 (p4): 1.2.2 健壮性
p1-2-3 (p5): 1.2.3 可靠性
p1-2-4 (p6): 1.2.4 性能
p1-2-5 (p6): 1.2.5 易用性
p1-2-6 (p7): 1.2.6 清晰性
p1-2-7 (p7): 1.2.7 安全性
p1-2-8 (p8): 1.2.8 可扩展性
p1-2-9 (p8): 1.2.9 兼容性
p1-2-10 (p8): 1.2.10 可移植性
p1-3 (p9): 1.3 人们关注的不仅仅是质量
p1-3-1 (p9): 1.3.1 质量、生产率和成本之间的关系
p1-3-2 (p10): 1.3.2 软件过程改进的基本概念
p1-4 (p13): 1.4 高质量软件开发的基本方法
p1-4-1 (p13): 1.4.1 建立软件过程规范
p1-4-2 (p15): 1.4.2 复用
p1-4-3 (p16): 1.4.3 分而治之
p1-4-4 (p17): 1.4.4 优化与折中
p1-4-5 (p17): 1.4.5 技术评审
p1-4-6 (p19): 1.4.6 测试
p1-4-7 (p21): 1.4.7 质量保证
p1-4-8 (p22): 1.4.8 改错
p1-5 (p23): 1.5 关于软件开发的一些常识和思考
p1-5-1 (p23): 1.5.1 有最好的编程语言吗
p1-5-2 (p23): 1.5.2 编程是一门艺术吗
p1-5-3 (p24): 1.5.3 编程时应该多使用技巧吗
p1-5-4 (p24): 1.5.4 换更快的计算机还是换更快的算法
p1-5-5 (p24): 1.5.5 错误是否应该分等级
p1-5-6 (p25): 1.5.6 一些错误的观念
p1-6 (p25): 1.6 小结
p2 (p27): 第2章 编程语言发展简史
p2-1 (p27): 2.1 编程语言大事记
p2-2 (p31): 2.2 Ada的故事
p2-3 (p31): 2.3 C/C++发展简史
p2-4 (p32): 2.4 Borland与Microsoft之争
p2-5 (p33): 2.5 Java阵营与Microsoft的较量
p2-6 (p36): 2.6 小结
p3 (p37): 第3章 程序的基本概念
p3-1 (p37): 3.1 程序设计语言
p3-2 (p38): 3.2 语言实现
p3-3 (p40): 3.3 程序库
p3-4 (p40): 3.4 开发环境
p3-5 (p41): 3.5 程序的工作原理
p3-6 (p42): 3.6 良好的编程习惯
p4 (p45): 第4章 C++/C程序设计入门
p4-1 (p45): 4.1 C++/C程序的基本概念
p4-1-1 (p45): 4.1.1 启动函数main()
p4-1-2 (p47): 4.1.2 命令行参数
p4-1-3 (p48): 4.1.3 内部名称
p4-1-4 (p49): 4.1.4 连接规范
p4-1-5 (p51): 4.1.5 变量及其初始化
p4-1-6 (p52): 4.1.6 C Runtime Library
p4-1-7 (p52): 4.1.7 编译时和运行时的不同
p4-1-8 (p54): 4.1.8 编译单元和独立编译技术
p4-2 (p54): 4.2 基本数据类型和内存映像
p4-3 (p56): 4.3 类型转换
p4-3-1 (p56): 4.3.1 隐式转换
p4-3-2 (p58): 4.3.2 强制转换
p4-4 (p60): 4.4 标识符
p4-5 (p61): 4.5 转义序列
p4-6 (p62): 4.6 运算符
p4-7 (p63): 4.7 表达式
p4-8 (p65): 4.8 基本控制结构
p4-9 (p65): 4.9 选择(判断)结构
p4-9-1 (p66): 4.9.1 布尔变量与零值比较
p4-9-2 (p67): 4.9.2 整型变量与零值比较
p4-9-3 (p67): 4.9.3 浮点变量与零值比较
p4-9-4 (p69): 4.9.4 指针变量与零值比较
p4-9-5 (p69): 4.9.5 对if语句的补充说明
p4-9-6 (p70): 4.9.6 switch结构
p4-10 (p71): 4.10 循环(重复)结构
p4-10-1 (p72): 4.10.1 for语句的循环控制变量
p4-10-2 (p73): 4.10.2 循环语句的效率
p4-11 (p78): 4.11 结构化程序设计原理
p4-12 (p79): 4.12 goto/continue/break语句
p4-13 (p79): 4.13 示例
p5 (p85): 第5章 C++/C常量
p5-1 (p85): 5.1 认识常量
p5-1-1 (p85): 5.1.1 字面常量
p5-1-2 (p86): 5.1.2 符号常量
p5-1-3 (p87): 5.1.3 契约性常量
p5-1-4 (p87): 5.1.4 枚举常量
p5-2 (p87): 5.2 正确定义符号常量
p5-3 (p88): 5.3 const与#define的比较
p5-4 (p89): 5.4 类中的常量
p5-5 (p90): 5.5 实际应用中如何定义常量
p6 (p95): 第6章 C++/C函数设计基础
p6-1 (p95): 6.1 认识函数
p6-2 (p96): 6.2 函数原型和定义
p6-3 (p97): 6.3 函数调用方式
p6-4 (p99): 6.4 认识函数堆栈
p6-5 (p100): 6.5 函数调用规范
p6-6 (p101): 6.6 函数连接规范
p6-7 (p102): 6.7 参数传递规则
p6-8 (p104): 6.8 返回值的规则
p6-9 (p107): 6.9 函数内部实现的规则
p6-10 (p109): 6.10 存储类型及作用域规则
p6-10-1 (p109): 6.10.1 存储类型
p6-10-2 (p110): 6.10.2 作用域规则
p6-10-3 (p111): 6.10.3 连接类型
p6-11 (p113): 6.11 递归函数
p6-12 (p116): 6.12 使用断言
p6-13 (p118): 6.13 使用const提高函数的健壮性
p6-13-1 (p118): 6.13.1 用const修饰函数的参数
p6-13-2 (p119): 6.13.2 用const修饰函数的返回值
p7 (p121): 第7章 C++/C指针、数组和字符串
p7-1 (p121): 7.1 指针
p7-1-1 (p121): 7.1.1 指针的本质
p7-1-2 (p123): 7.1.2 指针的类型及其支持的运算
p7-1-3 (p125): 7.1.3 指针传递
p7-2 (p126): 7.2 数组
p7-2-1 (p126): 7.2.1 数组的本质
p7-2-2 (p128): 7.2.2 二维数组
p7-2-3 (p129): 7.2.3 数组传递
p7-2-4 (p131): 7.2.4 动态创建、初始化和删除数组的方法
p7-3 (p133): 7.3 字符数组、字符指针和字符串
p7-3-1 (p133): 7.3.1 字符数组、字符串和′\0′的关系
p7-3-2 (p134): 7.3.2 字符指针的误区
p7-3-3 (p134): 7.3.3 字符串拷贝和比较
p7-4 (p134): 7.4 函数指针
p7-5 (p137): 7.5 引用和指针的比较
p8 (p141): 第8章 C++/C高级数据类型
p8-1 (p141): 8.1 结构(struct)
p8-1-1 (p141): 8.1.1 关键字struct与class的困惑
p8-1-2 (p142): 8.1.2 使用struct
p8-1-3 (p145): 8.1.3 位域
p8-1-4 (p147): 8.1.4 成员对齐
p8-2 (p159): 8.2 联合(Union)
p8-3 (p161): 8.3 枚举(Enum)
p8-4 (p162): 8.4 文件
p9 (p165): 第9章 C++/C编译预处理
p9-1 (p165): 9.1 文件包含
p9-1-1 (p165): 9.1.1 内部包含卫哨和外部包含卫哨
p9-1-2 (p166): 9.1.2 头文件包含的合理顺序
p9-2 (p166): 9.2 宏定义
p9-3 (p169): 9.3 条件编译
p9-3-1 (p169): 9.3.1 #if、#elif和#else
p9-3-2 (p170): 9.3.2 #ifdef和#ifndef
p9-4 (p170): 9.4 #error
p9-5 (p171): 9.5 #pragma
p9-6 (p171): 9.6 #和##运算符
p9-7 (p172): 9.7 预定义符号常量
p10 (p173): 第10章 C++/C文件结构和程序版式
p10-1 (p173): 10.1 程序文件的目录结构
p10-2 (p174): 10.2 文件的结构
p10-2-1 (p174): 10.2.1 头文件的用途和结构
p10-2-2 (p175): 10.2.2 版权和版本信息
p10-2-3 (p176): 1 0.2.3 源文件结构
p10-3 (p176): 10.3 代码的版式
p10-3-1 (p176): 10.3.1 适当的空行
p10-3-2 (p177): 10.3.2 代码行及行内空格
p10-3-3 (p178): 10.3.3 长行拆分
p10-3-4 (p179): 10.3.4 对齐与缩进
p10-3-5 (p180): 10.3.5 修饰符的位置
p10-3-6 (p180): 10.3.6 注释风格
p10-3-7 (p181): 10.3.7 ADT/UDT版式
p11 (p183): 第11章 C++/C应用程序命名规则
p11-1 (p183): 11.1 共性规则
p11-2 (p184): 11.2 简单的Windows应用程序命名
p12 (p187): 第12章 C++面向对象程序设计方法概述
p12-1 (p187): 12.1 漫谈面向对象
p12-2 (p188): 12.2 对象的概念
p12-3 (p189): 12.3 信息隐藏与类的封装
p12-4 (p193): 12.4 类的继承特性
p12-5 (p199): 12.5 类的组合特性
p12-6 (p200): 12.6 动态特性
p12-6-1 (p200): 12.6.1 虚函数
p12-6-2 (p201): 12.6.2 抽象基类
p12-6-3 (p203): 12.6.3 动态绑定
p12-6-4 (p206): 12.6.4 运行时多态
p12-6-5 (p207): 12.6.5 多态数组
p12-7 (p214): 12.7 C++对象模型
p12-7-1 (p214): 12.7.1 对象的内存映像
p12-7-2 (p224): 12.7.2 隐含成员
p12-7-3 (p225): 12.7.3 C++编译器如何处理成员函数
p12-7-4 (p225): 12.7.4 C++编译器如何处理静态成员
p12-8 (p226): 12.8 小结
p13 (p229): 第13章 对象的初始化、拷贝和析构
p13-1 (p229): 13.1 构造函数与析构函数的起源
p13-2 (p230): 13.2 为什么需要构造函数和析构函数
p13-3 (p232): 13.3 构造函数的成员初始化列表
p13-4 (p234): 13.4 对象的构造和析构次序
p13-5 (p235): 13.5 构造函数和析构函数的调用时机
p13-6 (p236): 13.6 构造函数和赋值函数的重载
p13-7 (p238): 13.7 示例:类String的构造函数和析构函数
p13-8 (p239): 13.8 何时应该定义拷贝构造函数和拷贝赋值函数
p13-9 (p240): 13.9 示例:类String的拷贝构造函数和拷贝赋值函数
p13-10 (p242): 13.10 用偷懒的办法处理拷贝构造函数和拷贝赋值函数
p13-11 (p243): 13.11 如何实现派生类的基本函数
p14 (p247): 第14章 C++函数的高级特性
p14-1 (p247): 14.1 函数重载的概念
p14-1-1 (p247): 14.1.1 重载的起源
p14-1-2 (p247): 14.1.2 重载是如何实现的
p14-1-3 (p249): 14.1.3 小心隐式类型转换导致重载函数产生二义性
p14-2 (p250): 14.2 成员函数的重载、覆盖与隐藏
p14-2-1 (p250): 14.2.1 重载与覆盖
p14-2-2 (p251): 14.2.2 令人迷惑的隐藏规则
p14-2-3 (p253): 14.2.3 摆脱隐藏
p14-3 (p254): 14.3 参数的默认值
p14-4 (p255): 14.4 运算符重载
p14-4-1 (p255): 14.4.1 基本概念
p14-4-2 (p256): 14.4.2 运算符重载的特殊性
p14-4-3 (p257): 14.4.3 不能重载的运算符
p14-4-4 (p257): 14.4.4 重载+++和--
p14-5 (p259): 14.5 函数内联
p14-5-1 (p259): 14.5.1 用函数内联取代宏
p14-5-2 (p260): 14.5.2 内联函数的编程风格
p14-5-3 (p261): 14.5.3 慎用内联
p14-6 (p261): 14.6 类型转换函数
p14-7 (p264): 14.7 const成员函数
p15 (p267): 第15章 C++异常处理和RTTI
p15-1 (p267): 15.1 为什么要使用异常处理
p15-2 (p268): 15.2 C++异常处理
p15-2-1 (p268): 15.2.1 异常处理的原理
p15-2-2 (p269): 15.2.2 异常类型和异常对象
p15-2-3 (p270): 15.2.3 异常处理的语法结构
p15-2-4 (p272): 15.2.4 异常的类型匹配规则
p15-2-5 (p272): 15.2.5 异常说明及其冲突
p15-2-6 (p273): 15.2.6 当异常抛出时局部对象如何释放
p15-2-7 (p273): 15.2.7 对象构造和析构期间的异常
p15-2-8 (p275): 15.2.8 如何使用好异常处理技术
p15-2-9 (p278): 15.2.9 C+++的标准异常
p15-3 (p278): 15.3 虚函数面临的难题
p15-4 (p280): 15.4 RTTI及其构成
p15-4-1 (p280): 15.4.1 起源
p15-4-2 (p281): 15.4.2 typeid运算符
p15-4-3 (p283): 15.4.3 dynamic_cast<>运算符
p15-4-4 (p285): 15.4.4 RTTI的魅力与代价
p16 (p287): 第16章 内存管理
p16-1 (p287): 16.1 内存分配方式
p16-2 (p288): 16.2 常见的内存错误及其对策
p16-3 (p289): 16.3 指针参数是如何传递内存的
p16-4 (p291): 16.4 free和delete把指针怎么啦
p16-5 (p292): 16.5 动态内存会被自动释放吗
p16-6 (p292): 16.6 杜绝“野指针”
p16-7 (p293): 16.7 有了malloc/free为什么还要new/delete
p16-8 (p295): 16.8 malloc/free的使用要点
p16-9 (p296): 16.9 new有3种使用方式
p16-9-1 (p296): 16.9.1 plain new/delete
p16-9-2 (p297): 16.9.2 nothrow new/delete
p16-9-3 (p297): 16.9.3 placement new/delete
p16-10 (p300): 16.10 new/delete的使用要点
p16-11 (p301): 16.11 内存耗尽怎么办
p16-12 (p302): 16.12 用对象模拟指针
p16-13 (p305): 16.13 泛型指针auto_ptr
p16-14 (p306): 16.14 带有引用计数的智能指针
p16-15 (p312): 16.15 智能指针作为容器元素
p17 (p323): 第17章 学习和使用STL
p17-1 (p323): 17.1 STL简介
p17-2 (p324): 17.2 STL头文件的分布
p17-2-1 (p324): 17.2.1 容器类
p17-2-2 (p325): 17.2.2 泛型算法
p17-2-3 (p325): 17.2.3 迭代器
p17-2-4 (p325): 17.2.4 数学运算库
p17-2-5 (p325): 17.2.5 通用工具
p17-2-6 (p326): 17.2.6 其他头文件
p17-3 (p326): 17.3 容器设计原理
p17-3-1 (p326): 17.3.1 内存映像
p17-3-2 (p327): 17.3.2 存储方式和访问方式
p17-3-3 (p328): 17.3.3 顺序容器和关联式容器的比较
p17-3-4 (p331): 17.3.4 如何遍历容器
p17-3-5 (p332): 17.3.5 存储空间重分配问题
p17-3-6 (p333): 17.3.6 什么样的对象才能作为STL容器的元素
p17-4 (p334): 17.4 迭代器
p17-4-1 (p334): 17.4.1 迭代器的本质
p17-4-2 (p337): 17.4.2 迭代器失效及其危险性
p17-4-3 (p346): 17.4.3 如何在遍历容器的过程中正确删除元素
p17-5 (p347): 17.5 存储分配器
p17-6 (p349): 17.6 适配器
p17-7 (p352): 17.7 泛型算法
p17-8 (p355): 17.8 一些特殊的容器
p17-8-1 (p356): 17.8.1 string类
p17-8-2 (p356): 17.8.2 bitset并非set
p17-8-3 (p358): 17.8.3 节省存储空间的vector<bool>
p17-8-4 (p360): 17.8.4 空容器
p17-9 (p361): 17.9 STL容器特征总结
p17-10 (p364): 17.10 STL使用心得
p18 (p367): 附录A C++/C试题
p19 (p371): 附录B C++/C试题答案与评分标准
p20 (p377): 附录C 大学十年
p21 (p395): 附录D 《大学十年》后记
p22 (p397): 附录E 术语与缩写解释
开源日期
2022-02-16
🚀 快速下载
成为会员以支持书籍、论文等的长期保存。为了感谢您对我们的支持,您将获得高速下载权益。❤️
如果您在本月捐款,您将获得双倍的快速下载次数。
🐢 低速下载
由可信的合作方提供。 更多信息请参见常见问题解答。 (可能需要验证浏览器——无限次下载!)
- 低速服务器(合作方提供) #1 (稍快但需要排队)
- 低速服务器(合作方提供) #2 (稍快但需要排队)
- 低速服务器(合作方提供) #3 (稍快但需要排队)
- 低速服务器(合作方提供) #4 (稍快但需要排队)
- 低速服务器(合作方提供) #5 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #6 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #7 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #8 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #9 (无需排队,但可能非常慢)
- 下载后: 在我们的查看器中打开
所有选项下载的文件都相同,应该可以安全使用。即使这样,从互联网下载文件时始终要小心。例如,确保您的设备更新及时。
外部下载
-
对于大文件,我们建议使用下载管理器以防止中断。
推荐的下载管理器:JDownloader -
您将需要一个电子书或 PDF 阅读器来打开文件,具体取决于文件格式。
推荐的电子书阅读器:Anna的档案在线查看器、ReadEra和Calibre -
使用在线工具进行格式转换。
推荐的转换工具:CloudConvert和PrintFriendly -
您可以将 PDF 和 EPUB 文件发送到您的 Kindle 或 Kobo 电子阅读器。
推荐的工具:亚马逊的“发送到 Kindle”和djazz 的“发送到 Kobo/Kindle” -
支持作者和图书馆
✍️ 如果您喜欢这个并且能够负担得起,请考虑购买原版,或直接支持作者。
📚 如果您当地的图书馆有这本书,请考虑在那里免费借阅。
下面的文字仅以英文继续。
总下载量:
“文件的MD5”是根据文件内容计算出的哈希值,并且基于该内容具有相当的唯一性。我们这里索引的所有影子图书馆都主要使用MD5来标识文件。
一个文件可能会出现在多个影子图书馆中。有关我们编译的各种数据集的信息,请参见数据集页面。
有关此文件的详细信息,请查看其JSON 文件。 Live/debug JSON version. Live/debug page.