零基础学C++


零基础学C++

文章插图
零基础学C++【零基础学C++】《零基础学C++》是2009年1月机械工业出版社出版的图书 , 作者是杨彦强、刘袁红、王浩 。
基本介绍书名:零基础学C++
作者:杨彦强、刘袁红、王浩
ISBN:9787111252269
页数:476页
定价:69.00
出版社:机械工业出版社
出版时间:2009年1月1日
装帧:平装
开本:16开
版次:第1版
内容简介阅读和学习本书并不要求读者有C++语言的基础 , 通过几百个简洁高效的代码 , 《零基础学C++(第2版)》将带领读者循序渐进地领略C++语言的魅力所在 。本书採用从无到有、由浅入深、逐级递进的编写方式 , 尤其适合无C++语言基础或C语言基础薄弱的程式设计师阅读 。本书共分为六篇21章 , 介绍了Visual C++6开发环境的搭建、C++语言的基本数据类型、C++语言的表达式、函式、函式重载、类的继承、多态、记忆体管理方式、档案存储、错误与异常、RTTI、String类、编码风格与程式编译等内容 , 最后还对世界500强中IT公司常见面试题进行了讲解 。本书非常适合C++语言的初、中级学者阅读 , 并可作为开发人员的参考手册 。图书目录前言第一篇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.3C++简介1.3.1C++语言发展历程1.3.2C++语言特点1.3.3C++程式开发基本过程1.4C++开发环境的搭建1.4.1Visual C++ 6开发环境简介1.4.2开发步骤1.5第一个C++程式1.6小结1.7上机实践习题第2章开始C++之旅2.1C++程式的结构2.1.1注释2.1.2编译预处理与新旧标準2.1.3主函式2.1.4名称空间2.1.5C++语素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.11sizeof运算符与sizeof表达式2.4.12运算符的优先权和结合性2.5类型转换2.5.1赋值转换2.5.2表达式中的转换2.5.3强制类型转换2.5.4函式调用和传递参数时的类型转换2.6流程控制语句2.6.1if...else...选择结构2.6.2switch结构2.6.3if...else...结构和switch结构的比较2.6.4for循环结构2.6.5for循环结构嵌套2.6.6while循环结构2.6.7do...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.3C 风格字元串3.3.1C 风格字元串的声明3.3.2字元数组的cin和cout3.3.3get()函式和getline()函式3.3.4cin与get()/getline()函式的搭配问题3.3.5访问C风格字元串中的某个元素3.3.6C风格字元串处理函式3.4多维数组3.4.1声明一个多维数组3.4.2初始化多维数组3.4.3多维数组套用举例3.4.4多维数组在记忆体中是如何排列元素的3.5小结3.6上机实践习题第4章指针和引用4.1指针的定义与使用4.1.1声明一个指针变数4.1.2初始化指针变数4.1.3指向指针的指针4.1.4指针赋值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.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.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.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.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.8inline函式6.5递归6.6函式的重载6.6.1何时使用函式重载6.6.2如何实现函式重载6.6.3陷阱:隐式转换导致重载函式出现二义性6.7C++如何使用记忆体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.2typedef7.3.3通过函式指针将函式作为另一个函式的参数7.3.4函式指针数组7.3.5返回函式指针的函式7.3.6带参主函式7.4函式与数组7.4.1数组名作为函式参数7.4.2通过指针得到多于1个的回传值7.5函式与结构体、共用体及类对象7.5.13种参数调用7.5.23种返回机制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.2C++类的定义8.2.1类定义的基本形式8.2.2类定义示例8.2.3class和struct8.3C++类的实现8.3.1在类定义时定义成员函式8.3.2在类定义的外部定义成员函式8.4C++类的使用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.1const数据成员8.7.2引用成员8.7.3类对象成员8.7.4特别说明8.7.5static数据成员8.8特殊函式成员8.8.1静态成员函式8.8.2const与成员函式8.9对象的组织8.9.1const对象8.9.2指向对象的指针8.9.3对象的大小8.9.4this指针8.9.5对象数组8.9.6对象鍊表8.10为对象动态分配记忆体8.10.1使用new和delete为单个对象分配/释放动态记忆体8.10.2使用new和delete为对象数组分配/释放动态空间8.10.3malloc和free能否为对象动态申请记忆体8.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.5运算符重载9.5.1运算符重载规则9.5.2以成员函式形式重载运算符9.5.3以友元函式形式重载运算符9.5.4友元函式形式和成员函式形式的比较9.5.5对运算符重载的补充说明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.8.1重载解析9.8.2什幺是完全匹配9.9小结9.10上机实践习题第10章继承10.1什幺是继承10.1.1简单示例10.1.2继承的层次性10.2派生类10.2.1public派生与private派生10.2.2protected成员与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.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.4vector容器13.2.5deque容器13.2.6list容器13.3使用关联式容器13.3.1set容器13.3.2multiset容器13.3.3map容器13.3.4multimap容器13.4关联式容器支持的成员函式操作13.4.1元素的插入13.4.2元素的删除13.4.3元素的查找与访问13.5叠代器13.5.1理解叠代器本质13.5.2叠代器类型13.5.3为什幺要定义这幺多叠代器13.5.4容器中定义的叠代器类型与5种类型的对应13.5.5流叠代器13.5.6叠代器失效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.53种输入输出机制14.2高层I/O14.2.1标準输出函式printf14.2.2标準输入函式scanf14.2.3扫描集14.2.4sprintf函式和sscanf函式14.2.5fprintf函式和fscanf函式14.2.6档案访问机制14.3流类库14.3.1流类库更安全、更高效14.3.2流类库层次14.4输出流14.4.1操作符<<14.4.2其他ostream方法14.4.3格式状态字14.4.4格式控制值的默认值14.4.5flag函式读取和设定格式状态字14.4.6使用setf函式和unsetf函式设定格式关键字14.4.7设定域宽14.4.8填充字元14.4.9浮点数输出和显示精度14.4.10控制符14.5输入流14.5.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重载>>和<<14.7.1插入符的重载14.7.2抽取符的重载14.8档案操作14.8.1档案操作基本过程14.8.2档案的打开14.8.3取消档案和流的关联14.8.4档案的读写14.8.5文本档案的读写14.8.6二进制档案的读写14.8.7档案定位指针和随机读取14.9字元串流14.9.1strstream类族14.9.2sstream类族14.10小结14.11上机实践习题第15章名称空间15.1什幺是名称空间15.1.1名称空间範例15.1.2定义名称空间15.2实体的作用域与可见域15.2.1实体可见域15.2.2可见域的扩展15.2.3using声明机制15.2.4using声明带来的多重声明问题(二义性)15.2.5空间内的禁止15.2.6先声明 , 后使用15.3名称空间的作用域与可见性15.3.1名称空间的定义策略15.3.2推荐用法15.3.3名称空间嵌套15.3.4using编译指令15.3.5未命名的名称空间15.4对名称空间的思考15.5小结15.6上机实践习题第16章异常和错误16.1编码时的防错16.1.1调用abort函式或exit函式16.1.2返回错误标誌16.2异常机制16.2.1关键字throw16.2.2异常处理程式16.2.3自定义异常对象16.2.4有继承关係的类异常16.2.5terminate函式和set_terminate函式16.2.6unexpected函式与set_unexpected函式16.2.7标準异常16.2.8对unexpected函式的补充16.3异常发生时的记忆体管理16.3.1堆叠解退16.3.2异常处理机制与函式的不同16.3.3构造函式中抛出异常16.3.4记忆体泄露16.3.5析构函式中可否抛出异常16.4auto_ptr类16.4.1使用auto_ptr类模板16.4.2关于auto_ptr的若干问题16.5小结16.6上机实践习题第17章RTTI和类型转换操作符17.1RTTI机制17.1.1dynamic_cast操作符17.1.2typeinfo类和typeid操作符17.1.3补充说明17.2类型转换操作符17.2.1const_cast操作符17.2.2static_cast操作符17.2.3reinterpret_cast操作符17.3小结17.4上机实践习题第18章string字元串类18.1为什幺要使用string类18.2声明一个字元串18.3字元串的输入输出18.4string类功能18.4.1string字元串和C风格字元串的转换18.4.2赋值和清空18.4.3元素删除18.4.4元素追加与相加18.4.5元素插入18.4.6大小和容量18.4.7元素存取18.4.8字元串比较18.4.9提取子串18.4.10搜寻与查找18.5小结18.6上机实践习题第19章编码风格19.1程式的排版19.1.1注释19.1.2空行的用法19.1.3代码行19.1.4空格19.1.5缩进与对齐19.1.6&和*的位置19.2命名规则19.2.1Windows风格和Unix风格19.2.2如何对程式实体命名19.3项目档案的组织19.3.1模组划分19.3.2头档案19.3.3定义档案19.3.4目录结构19.4小结19.5上机实践习题第20章程式编译20.1程式的编译流程20.2预处理20.2.1头档案包含20.2.2宏20.2.3条件编译20.2.4#ifdef、 #ifndef与重複包含20.2.5使用const代替#define定义常量20.2.6inline与#define的比较20.3VC6调试入门20.3.1断点的设定与去除20.3.2条件断点20.3.3数据断点20.3.4讯息断点20.3.5观察视图(Watch)20.3.6记忆体视图(Memory)20.3.7变数视图(Variables)20.3.8暂存器视图(Registers)20.3.9调用堆叠视图(Call Stack)20.3.10反彙编视图(Disassembly)20.3.11进程控制20.4其他调试手段20.4.1Debug模式和Release模式20.4.2assert宏20.4.3输出字元串20.5小结20.6上机实践习题第六篇面试题精选第21章常见面试题21.1常见基本知识问答题面试题1:简述面向对象的3个基本特徵面试题2:局部变数能否和全局变数重名面试题3:类成员函式的重载、覆盖和隐藏的区别是什幺面试题4:用变数a给出下面的定义面试题5:在C++中 , 下面的结构是合法的吗?如果是 , 其作用是什幺面试题6:在非C++中建类 A 和 B , 在哪几种情况下B能隐式转化为A面试题7:C++中的空类 , 默认产生哪些类成员函式面试题8:C++有哪些性质(面向对象特点)面试题9:子类析构时要调用父类的析构函式吗面试题10:什幺是引用?声明和使用“引用”要注意哪些问题面试题11:将引用作为函式返回值类型的格式及优点有哪些面试题12:引用与指针的区别是什幺面试题13:重载和重写(覆盖)的区别面试题14:多态的作用是什幺面试题15:请指出const与#define相比有何优点面试题16:C语言中static关键字的具体作用有哪些面试题17:如何判断程式是由C 编译程式还是由C++编译程式编译的面试题18:关键字const的含义是什幺21.2世界500强公司的智力问答题面试题19:工人分金条面试题20:分蛋糕面试题21:过桥问题面试题22:黑白帽子面试题23:电梯与钻石面试题24:手电筒传递面试题25:烧绳问题面试题26:圆的下水道盖子面试题27:选建筑师面试题28:天平分盐面试题29:分不开的钱面试题30:小鸟追火车面试题31:给红色最大的机会面试题32:镜子中的影像面试题33:污染的药丸面试题34:称出不是标準重量的水面试题35:多彩的果冻面试题36:电子游戏机面试题37:监狱里的囚犯面试题38:灯的状态面试题39:时针和分针面试题40:3个奇数面试题41:屋内的灯面试题42:找出最重的球面试题43:盲人分袜子面试题44:烧香计时面试题45:平分蜂蜜面试题46:猜经理女儿的年龄面试题47:两个圆环面试题48:喝啤酒面试题49:算24点面试题50:聪明人面试题51:海盗分金币面试题52:到底是什幺牌面试题53:聪明的老闆娘面试题54:找出不同重量的球21.3分析题面试题55:分析下面的程式段 , 显示最后的结果面试题56:分析程式最后的输出结果面试题57:分析最后输出的结果面试题58:求下面函式的返回值面试题59:分析最后输出的结果面试题60:分析最后输出的结果21.4编程题面试题61:结果输出到档案面试题62:String类的具体实现面试题63:鍊表题 , 一个鍊表的节点结构面试题64:写一个函式并找出在一个整数数组中第二大的数面试题65:字元串的逆序输出面试题66:判断作业系统的位数面试题67:实现对数组的降序排序面试题68:斐波那契数列1、1、2、3、5等 , 编写程式求第10项