内容推荐 本书结合C++程序,简要介绍了汇编语言,并以栈和队列为主线,逐步深入面向对象的概念。本书从面向过程转向面向对象的编程开始,接着引入类、内联、线程、异常、虚函数、运算符重载、移动语义等概念实现栈和队列,然后基于继承和聚合等概念通过双栈模拟队列,很后引入类模板、类型转换、类型推导等概念实现栈和队列,深入细致地介绍了ISO/IEC14882:2017标准的全部语法。 为了培养学生面向对象的建模能力,书中按照面向对象的分析与设计步骤,完整展示了骰子游戏的建模过程,并用C++进行了面向对象的程序设计。全书通过挖掘C++概念的应用背景,提供了可供运行的有趣实例和习题。 目录 章C++引论 1.1计算机的体系结构1 1.1.1计算机系统的结构1 1.1.2数据与程序的存储方式3 1.2进制及其转换和运算4 1.2.1计算机采用二进制的原因5 1.2.2C++的常用进制及其运算5 1.380X86系列汇编语言7 1.3.1汇编语言及C++编译简介7 1.3.2汇编指令及C++程序编译9 1.4C++的发展历史及特点12 1.4.1C++的发展历史12 1.4.2C++的特点12 1.5语法图与程序流程图13 1.5.1C++的语法图13 1.5.2程序流程图15 1.6编译环境的安装与使用16 1.6.1编译过程及编译环境16 1.6.2Microsoft Visual Studio 2019的安装17 练习题22 第2章类型、常量及变量 2.1C++的单词23 2.1.1C++的字符集23 2.1.2C++的关键字24 2.2预定义类型及值域和常量25 2.2.1预定义类型及其数值转换25 2.2.2强制类型转换及类型值域26 2.2.3预定义类型及相关常量28 2.3变量及其类型解析31 2.3.1变量的说明和定义31 2.3.2指针及其类型理解34 2.3.3有址引用变量40 2.3.4无址引用变量45 2.3.5元素、下标及数组47 2.4运算符及表达式49 2.4.1位运算与等号运算49 2.4.2指针运算及其结合方向50 2.4.3关系运算及结果转换51 2.5结构与联合52 2.5.1结构体52 2.5.2联合体54 练习题56 第3章语句、函数及程序设计 3.1C++的语句58 3.1.1简单语句58 3.1.2转移语句59 3.1.3分支语句60 3.1.4循环语句63 3.1.5break和continue语句67 3.1.6asm和static_assert语句68 3.2C++的函数68 3.2.1函数说明与定义69 3.2.2头文件与说明70 3.2.3函数的参数说明72 3.2.4函数重载74 3.2.5inline及constexpr函数75 3.2.6线程互斥及线程本地变量77 3.3作用域79 3.3.1全局作用域与模块作用域79 3.3.2局部作用域与块作用域81 3.4生命期82 3.5程序设计实例84 3.5.1栈编程实例84 3.5.2队列编程实例86 3.5.3有限自动机编程实例87 练习题90 第4章C++的类 4.1类的声明及定义92 4.1.1面向对象的基本概念92 4.1.2类及对象定义的实例93 4.2成员访问权限及突破方法97 4.2.1成员的访问权限97 4.2.2突破成员的访问权限98 4.3内联、匿名类及位段99 4.3.1函数成员的内联99 4.3.2无对象的匿名联合101 4.3.3局部类及位段成员102 4.4new和delete运算符103 4.4.1简单类型及单个对象内存管理103 4.4.2复杂类型及对象数组内存管理105 4.5隐含参数this107 4.6对象的构造与析构109 4.6.1构造函数及对象初始化109 4.6.2成员默认值及构造与析构110 4.7类及对象的内存布局112 练习题116 第5章成员及成员指针 5.1实例成员指针117 5.1.1实例成员指针的用法117 5.1.2实例成员指针的限制118 5.2const、volatile和mutable119 5.2.1const和volatile的用法119 5.2.2mutable实例数据成员123 5.3静态数据成员124 5.3.1静态数据成员的用法124 5.3.2静态数据成员的限制126 5.4静态函数成员128 5.4.1静态函数成员的访问128 5.4.2静态函数成员的限制129 5.5静态成员指针130 5.5.1静态成员指针的用法130 5.5.2多种指针的混合用法131 5.6联合的成员指针132 练习题133 第6章继承与构造 6.1单继承类136 6.2继承方式138 6.2.1继承后成员的访问权限138 6.2.2访问权限的修改141 6.3成员访问142 6.4构造与析构143 6.4.1对象构造的执行顺序143 6.4.2new、delete引起的构造与析构144 6.5父类和子类145 6.5.1父类及其函数调用145 6.5.2友元和派生类函数中的父子类关系147 6.6派生类的内存布局148 练习题149 第7章可访问性 7.1作用域152 7.1.1面向对象的作用域152 7.1.2面向过程的作用域155 7.2名字空间156 7.2.1名字空间的基本用法156 7.2.2使用名字空间的注意事项158 7.3成员友元160 7.3.1成员友元的一般用法161 7.3.2互为依赖的类的友元162 7.4普通友元及其注意事项163 7.4.1普通友元的一般用法163 7.4.2友元使用的注意事项165 7.5覆盖与隐藏167 7.5.1覆盖与隐藏的用法167 7.5.2使用using避免成员覆盖169 练习题170 第8章多态与虚函数 8.1虚函数174 8.1.1虚函数的声明及定义174 8.1.2虚函数的重载及内联176 8.2虚析构函数179 8.3类的引用180 8.3.1类的引用变量及其析构181 8.3.2类的引用参数及其析构183 8.4抽象类186 8.4.1抽象类的定义及用法186 8.4.2抽象类的应用实例187 8.5虚函数友元与晚期绑定189 8.5.1虚函数作为友元190 8.5.2虚函数的晚期绑定191 8.6有虚函数时的内存布局192 8.6.1基类有虚函数时的内存布局192 8.6.2基类无虚函数时的内存布局193 练习题194 第9章多继承与虚基类 9.1多继承类196 9.1.1无多继承的替代方案196 9.1.2多继承存在的问题197 9.2虚基类198 9.3派生类成员200 9.3.1无虚基类时的成员同名200 9.3.2有虚基类时的成员同名201 9.4单重及多重继承的构造与析构202 9.4.1单继承的构造与析构202 9.4.2多继承的构造与析构204 9.5多继承类的内存布局205 9.5.1无虚基类时的内存布局205 9.5.2有虚基类时的内存布局207 练习题209 0章异常与断言 10.1异常处理212 10.1.1抛出与捕获212 10.1.2异常的传播213 10.2捕获顺序214 10.3函数的异常接口216 10.3.1异常接口声明216 10.3.2noexcept接口217 10.4异常类型219 10.5异常对象的析构220 10.5.1通过对象指针析构220 10.5.2未完成对象的析构221 10.6断言223 练习题224 1章运算符重载 11.1运算符概述225 11.1.1结果为左值的运算符225 11.1.2运算符重载的分类226 11.1.3成员与非成员重载227 11.2运算符参数228 11.2.1自增与自减的重载228 11.2.2重载->运算符230 11.2.3单双目运算符的重载231 11.3赋值与调用232 11.3.1赋值运算符的重载232 11.3.2构造函数的重载233 11.3.3安全的编程方法235 11.4强制类型转换236 11.4.1单个显式参数构造函数236 11.4.2强制类型转换重载函数237 11.5重载new和delete238 11.6运算符重载实例240 11.6.1符号表运算的重载实例240 11.6.2栈及队列运算重载实例241 练习题244 2章类型解析、转换与推导 12.1隐式与显式类型转换250 12.1.1简单类型的隐式转换250 12.1.2简单类型的显式转换252 12.1.3简单类型的转换结果253 12.2cast系列类型转换256 12.2.1static_cast——静态转换256 12.2.2const_cast——只读转换257 12.2.3dynamic_cast——动态转换260 12.2.4reinterpret_cast——重释转换263 12.3类型转换实例265 12.3.1typeid获取类型标识265 12.3.2explicit要求显式调用267 12.3.3栈的类型转换实例268 12.4自动类型推导270 12.4.1auto的一般用法271 12.4.2auto用于函数和数组271 12.4.3表达式类型的提取272 12.5Lambda表达式273 12.5.1Lambda表达式的声明273 12.5.2Lambda表达式的参数275 12.5.3准函数Lambda表达式278 练习题279 3章模板与内存回收 13.1变量模板及其实例280 13.1.1变量模板的定义280 13.1.2变量模板的实例化281 13.2函数模板282 13.2.1函数模板的定义282 13.2.2成员函数模板的定义283 13.2.3函数模板的参数284 13.3函数模板实例化285 13.3.1函数模板强制实例化285 13.3.2函数模板实例特化286 13.3.3涉及指针的模板实例化287 13.4类模板288 13.4.1类模板的定义288 13.4.2派生类类模板的定义289 13.4.3多类型参数的类模板290 13.4.4省略参数的类模板290 13.4.5类模板的友元及Lambda表达式292 13.5类模板的实例化及特化294 13.5.1类模板的实例化294 13.5.2类模板实例特化294 13.5.3类模板的部分特化296 13.5.4实例化与类型推导297 13.5.5类模板及实例成员指针298 13.5.6模板分隔符的二义性299 13.5.7类模板与泛型300 13.6内存回收实例303 练习题305 4章流及类库 14.1流类概述307 14.2输出流308 14.3输入流311 14.4文件流312 14.5串流处理314 练习题315 5章面向对象开发实例 15.1面向对象设计概述316 15.2对象的静态模型317 15.3面向对象的分析319 15.4对象的设计与实现320 15.5骰子游戏模型设计实例322 15.5.1问题描述322 15.5.2对象模型322 15.5.3对象设计324 15.6游戏模型程序设计326 练习题331 参考文献338 |