出版社:机械工业出版社
年代:2014
定价:59.0
本书通过几百个简洁高效的代码,本书将带领读者循序渐进地领略C++语言的魅力所在。本书采用从无到有、由浅入深、逐级递进的编写方式,尤其适合无C++语言基础或C语言基础薄弱的程序员阅读。本书共分为6篇20章,介绍了Visual C++ 6开发环境的搭建、C++语言的基本数据类型、C++语言的表达式、函数、函数重载、类的继承、多态、内存管理方式、文件存储、错误与异常、RTTI、string类、编码风格与程序编译等内容,最后还用C++实现了一个教学管理系统,然后对世界500强中IT公司的常见面试题进行了讲解。
前言第一篇 C++基础第1章 C++概述1.1 了解计算机1.1.1 计算机硬件1.1.2 计算机软件1.2 程序设计语言1.2.1 机器语言1.2.2 汇编语言1.2.3 高级语言1.2.4 数据结构和算法1.2.5 面向过程的程序设计(POP)1.2.6 面向对象的程序设计(OOP)1.3 C++概述1.3.1 C++语言发展历程1.3.2 C++语言特点1.3.3 C++程序开发基本过程1.4 C++开发环境的搭建1.4.1 Visual C++ 6开发环境简介1.4.2 开发步骤1.5 第一个C++程序1.6 C语言与C++语言的区别1.6.1 程序设计思想的区别1.6.2 语法规范的区别1.7 小结1.8 习题第2章 开始C++之旅2.1 C++程序的结构2.1.1 C++的注释风格2.1.2 编译预处理与新旧标准2.1.3 主函数2.1.4 名称空间2.1.5 C++语素2.1.6 缩进与对齐2.2 变量与基本类型2.2.1 变量2.2.2 整型2.2.3 浮点型2.2.4 基本字符型2.2.5 宽字符型2.2.6 布尔型2.3 常量2.3.1 整型常量和浮点型常量2.3.2 字符型常量2.3.3 字符串常量2.3.4 符号常量2.3.5 枚举常量2.4 运算符与表达式2.4.1 算术运算2.4.2 逻辑运算2.4.3 短路表达式2.4.4 关系运算2.4.5 大有文章:变量是否为"0"2.4.6 条件运算2.4.7 位运算2.4.8 赋值运算2.4.9 ++和--2.4.10 逗号表达式2.4.11 sizeof运算符与sizeof表达式2.4.12 运算符的优先级和结合性2.5 类型转换2.5.1 赋值转换2.5.2 表达式中的转换2.5.3 强制类型转换2.5.4 函数调用和传递参数时的类型转换2.6 流程控制语句2.6.1 if…else…选择结构2.6.2 switch结构2.6.3 if…else…结构和switch结构的比较2.6.4 for循环结构2.6.5 for循环结构嵌套2.6.6 while循环结构2.6.7 do…while循环结构2.6.8 循环语句的效率2.6.9 流程转向控制语句之break2.6.10 流程转向控制语句之continue2.6.11 流程转向控制语句之goto2.6.12 程序终止函数exit()2.7 小结2.8 习题第二篇 C++过程开发第3章 数组和C风格字符串3.1 什么是数组3.2 一维数组3.2.1 一维数组的声明3.2.2 初始化一维数组3.2.3 一维数组应用举例3.2.4 数组操作注意事项3.3 C风格字符串3.3.1 C风格字符串的声明3.3.2 字符数组的cin和cout3.3.3 get()函数和getline()函数3.3.4 cin与get()/getline()函数的搭配问题3.3.5 访问C风格字符串中的某个元素3.3.6 C风格字符串处理函数3.4 二维数组及多维数组3.4.1 声明一个二维数组3.4.2 初始化二数组3.4.3 二维数组应用举例3.4.4 二维数组在内存中是如何排列元素的3.4.5 三维数组在内存中是如何排列元素的3.5 小结3.6 习题第4章 指针和引用4.1 指针的定义与使用4.1.1 为什么使用指针4.1.2 声明一个指针变量4.1.3 初始化指针变量4.1.4 指向指针的指针4.1.5 指针赋值4.2 指针的运算4.2.1 指针与整数的加减4.2.2 同类型指针间的比较4.2.3 同类型指针相减4.3 动态内存分配4.3.1 使用new动态分配内存4.3.2 使用delete释放动态申请的内存4.3.3 使用new申请动态数组4.3.4 不要使用或释放已经释放的内存块4.3.5 使用malloc和free动态申请内存4.3.6 动态内存申请并不一定能成功4.4 指针和const4.4.1 禁止改写指针(常量指针或常指针)4.4.2 禁止改写间接引用4.4.3 既禁止改写指针,又禁止改写间接引用4.5 指针与数组4.5.1 数组名指针4.5.2 数组元素的指针形式4.5.3 指向数组的指针(数组指针)4.5.4 指针数组4.5.5 指针与多维数组4.5.6 指针与字符数组4.6 引用4.6.1 引用的声明4.6.2 引用的特点4.6.3 引用的使用限制4.6.4 其他要说明的问题4.7 小结4.8 习题第5章 结构、共用体和链表5.1 结构5.1.1 如何定义一个结构5.1.2 结构变量的声明和使用5.1.3 结构变量的初始化5.1.4 结构变量间是否可以相互赋值5.1.5 结构体变量的sizeof5.1.6 结构体的复杂形式5.2 共用体5.2.1 共用体的定义5.2.2 共用体和结构的区别5.2.3 共用体变量的声明和初始化5.2.4 共用体使用举例5.2.5 共用体的sizeof5.3 结构数组和共用体数组5.3.1 结构数组的声明和初始化5.3.2 共用体数组的声明和初始化5.4 指向结构的指针5.4.1 声明一个结构指针5.4.2 结构指针的初始化5.4.3 使用指针访问结构成员5.5 链表5.5.1 链表的结构5.5.2 创建链表5.5.3 链表与数组的区别5.5.4 链表的遍历和查找5.5.5 链表的插入和删除5.5.6 删除整个链表5.6 小结5.7 习题第6章 用函数合理组织程序6.1 模块化带来的好处6.1.1 函数的调用过程6.1.2 抽象和封装6.1.3 实现一个函数6.2 函数定义6.2.1 函数头6.2.2 函数体6.2.3 函数定义补充说明6.2.4 函数的返回值6.3 函数声明6.3.1 为什么要进行函数声明6.3.2 如何声明一个函数6.3.3 分割程序文件6.4 函数调用6.4.1 形参和实参6.4.2 参数类型转换6.4.3 值传递6.4.4 指针传递6.4.5 引用传递6.4.6 对3种传递的补充6.4.7 缺省参数调用6.4.8 内联函数inline6.5 递归6.6 函数的重载6.6.1 什么是函数重载6.6.2 何时使用函数重载6.6.3 如何实现函数重载6.6.4 陷阱:隐式转换导致重载函数出现二义性6.7 C++如何使用内存6.7.1 自动存储(栈存储)6.7.2 静态存储(编译器预分配)6.8 作用域与可见域6.8.1 作用域6.8.2 可见域6.8.3 函数的作用域和可见域6.9 小结6.10 习题第7章 关于函数的高级专题7.1 内存使用错误剖析7.1.1 内存泄露7.1.2 野指针7.1.3 试图修改常量7.1.4 用错sizeof7.1.5 内存越界访问7.1.6 变量的初始化7.2 重申:函数参数传递和返回机制7.2.1 参数传递时的"副本"7.2.2 函数返回时的"副本"7.3 函数与指针7.3.1 指向函数的指针7.3.2 typedef关键字7.3.3 通过函数指针将函数作为另一个函数的参数7.3.4 函数指针数组7.3.5 返回函数指针的函数7.3.6 带参主函数7.4 函数与数组7.4.1 数组名作函数参数7.4.2 通过指针得到多于1个的回传值7.5 函数与结构体、共用体及类对象7.5.1 3种参数调用7.5.2 3种返回机制7.6 函数编写的建议7.6.1 合理使用const7.6.2 检查输入参数的有效性7.6.3 函数返回类型的判断7.7 小结7.8 习题第三篇 面向对象的C++第8章 面向对象编程基础8.1 面向对象的基本概念8.1.1 面向对象开发的优势8.1.2 什么是类8.1.3 类是分层的8.1.4 类和对象的关系8.2 C++类的定义8.2.1 类定义的基本形式8.2.2 类定义示例8.2.3 类和结构体8.3 C++类的实现8.3.1 在类定义时定义成员函数8.3.2 在类定义的外部定义成员函数8.4 C++类的使用8.4.1 声明一个对象8.4.2 对象的作用域、可见域和生存期8.5 对象的创建和撤销8.5.1 构造函数的作用8.5.2 构造函数可以有参数8.5.3 构造函数支持重载8.5.4 构造函数允许按参数默认方式调用8.5.5 初始化表达式8.5.6 析构函数8.5.7 显式调用析构函数8.6 复制构造函数8.6.1 复制构造函数调用机制8.6.2 默认复制构造函数带来的问题8.6.3 解决方案--显式定义复制构造函数8.6.4 关于构造函数和复制构造函数8.7 特殊数据成员8.7.1 const数据成员8.7.2 引用成员8.7.3 类对象成员8.7.4 static数据成员8.8 特殊函数成员8.8.1 静态成员函数8.8.2 const与成员函数8.9 对象的组织8.9.1 const对象8.9.2 指向对象的指针8.9.3 对象的大小8.9.4 this指针8.9.5 对象数组8.9.6 对象链表8.10 为对象动态分配内存8.10.1 使用new和delete为单个对象分配/释放动态内存8.10.2 使用new和delete[]为对象数组分配/释放动态空间8.10.3 malloc/free与new/delete8.11 小结8.12 习题第9章 关于对象的高级专题9.1 类的作用域9.2 类定义的作用域与可见域9.3 对象的生存期、作用域和可见域9.3.1 先定义,后实例化9.3.2 对象内存释放与堆内存9.4 友元9.4.1 认识友元函数9.4.2 友元的非成员函数9.4.3 友元的成员函数9.4.4 友元函数的重载9.4.5 友元类9.4.6 友元是否破坏了封装性9.5 运算符重载9.5.1 运算符重载规则9.5.2 运算符重载的优点9.5.3 以成员函数形式重载运算符9.5.4 以友元函数形式重载运算符9.5.5 友元函数形式和成员函数形式的比较9.5.6 对运算符重载的补充说明9.6 运算符重载范例9.6.1 赋值运算符9.6.2 函数调用运算符9.6.3 下标运算符9.7 类型转换9.7.1 由其他类型向定义类的转换9.7.2 由自定义类向其他类型的转换9.7.3 隐式转换带来的二义性9.8 小结9.9 习题第10章 继承10.1 什么是继承10.1.1 简单示例10.1.2 继承的层次性10.2 基类和派生类10.2.1 基类10.2.2 public派生与private派生10.2.3 protected成员与protected派生10.3 多基派生10.3.1 多基派生的声明和定义10.3.2 二义性问题10.3.3 消除二义性的解决方案10.4 虚基类10.4.1 共同基类带来的二义性10.4.2 解决共同基类带来的二义性10.4.3 虚基派生二义性与多基派生二义性不同10.5 派生类的构造函数和析构函数10.5.1 派生类的构造函数10.5.2 派生类的析构函数10.5.3 多基派生类的构造函数和析构函数10.5.4 虚基派生的构造函数和析构函数10.6 分清继承还是组合10.6.1 继承不是万能的10.6.2 组合10.7 基类与派生类对象间的相互转换10.7.1 类型适应10.7.2 多基继承时的情况10.7.3 公共基类10.7.4 虚基类的情况10.8 小结10.9 习题第11章 多态11.1 多态与虚函数11.1.1 静态联编11.1.2 动态联编11.1.3 为什么需要虚函数11.1.4 虚函数的声明和定义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 另一种抽象类:类中只定义了protected型的构造函数11.3.4 延伸:构造函数能否为private型11.3.5 虚析构函数11.4 虚函数引入的二义性11.4.1 多基派生11.4.2 共同基类和虚继承11.5 重载、覆盖与隐藏11.5.1 重载11.5.2 覆盖11.5.3 隐藏11.6 小结11.7 习题第四篇 泛型编程第12章 模板12.1 为什么要定义模板12.1.1 类型参数化12.1.2 模板的定义12.2 函数模板12.2.1 函数模板的定义12.2.2 函数模板的使用12.2.3 隐式实例化12.2.4 显式实例化12.2.5 特化12.2.6 重载12.2.7 优先级与执行顺序12.3 类模板12.3.1 定义类模板12.3.2 隐式实例化12.3.3 显式实例化12.3.4 显式特化12.3.5 部分特化12.3.6 重载和优先级12.4 模板的嵌套12.4.1 函数成员模板12.4.2 对象成员模板12.5 模板参数12.6 小结12.7 习题第13章 标准模板库13.1 理解STL13.1.1 容器13.1.2 适配器13.1.3 迭代器13.1.4 算法13.2 使用序列式容器13.2.1 序列式容器的创建和元素的访问13.2.2 所有容器都支持的特征13.2.3 序列式容器中元素的插入和删除13.2.4 vector容器、deque容器和list容器的比较13.3 使用关联式容器13.3.1 set容器13.3.2 multiset容器13.3.3 map容器13.3.4 multimap容器13.4 关联式容器支持的成员函数操作13.4.1 元素的插入13.4.2 元素的删除13.4.3 元素的查找与访问13.5 迭代器13.5.1 理解迭代器的本质13.5.2 迭代器的5种类型简介13.5.3 为什么要定义这么多迭代器13.5.4 容器中定义的迭代器类型与5种类型的对应13.5.5 流迭代器13.5.6 前向迭代器、双向迭代器和随机访问迭代器13.5.7 混合迭代器函数13.5.8 迭代器失效13.6 泛型算法13.6.1 什么是函数对象13.6.2 算法分类13.7 适配器13.7.1 容器适配器13.7.2 迭代器适配器13.7.3 函数适配器13.8 小结13.9 上机实践习题第五篇 输入输出处理和编程规范第14章 输入输出和文件14.1 输入/输出概述14.1.1 什么是文件14.1.2 流14.1.3 缓冲区14.1.4 重定向14.1.5 3种输入/输出机制14.2 高层I/O14.2.1 标准输出函数printf()14.2.2 标准输入函数scanf()14.2.3 扫描集14.2.4 sprintf()函数和sscanf()函数14.2.5 fprintf()函数和fscanf()函数14.2.6 文件访问机制14.3 流类库14.3.1 流类库更安全、更高效14.3.2 流类库层次14.4 输出流14.4.1 操作符操作符14.5.2 输入流与格式状态字14.5.3 输入流与域宽14.5.4 使用get()函数读取单个字符14.5.5 使用get()和getline()函数读取C风格字符串14.5.6 其他istream方法14.6 流状态14.6.1 什么是流状态14.6.2 读取流状态14.6.3 管理流状态14.7 重载>>和
《零基础学编程:零基础学C++(第3版)》通过几百个简洁高效的代码,本书将带领读者循序渐进地领略C++语言的魅力所在。本书采用从无到有、由浅入深、逐级递进的编写方式,尤其适合无C++语言基础或C语言基础薄弱的程序员阅读。本书共分为6篇20章,介绍了VisualC++6开发环境的搭建、C++语言的基本数据类型、C++语言的表达式、函数、函数重载、类的继承、多态、内存管理方式、文件存储、错误与异常、RTTI、string类、编码风格与程序编译等内容,最后还用C++实现了一个教学管理系统,然后对世界500强中IT公司的常见面试题进行了讲解。