|
1.内容提要 C++是国内外广泛采用的编程语言,应用于多种计算平台,国内很多高校都开设C/C++编程的相关课程,也出现了数百种相关教材。C/C++语言在2011年之前主要采用C99和2003标准。2011年国际标准化组织和国际电工委员会发布了C++11新标准,推出近百个新语言特征,之后C++14和C++17进一步完善了新标准。新标准引入许多新概念、新规则,使得C++编程表达复杂多变,初学者感到学习实践难度较大。本书采用研讨加实践的方式,力图使初学者能熟练掌握新概念、新规则,并增强编程求解能力。 本书共15章,主要分为两部分:第1部分(前8章)主要介绍结构化编程和函数式编程,第2部分(后7章)主要介绍面向对象编程和泛型编程。 本书可作为大学各学科专业学生学习实践C++的基础教材,也适合作为软件工程开发人员的自学用书和研究人员的参考用书。 2.前言 C++语言体现了当前过程性编程语言的主导思想,并得到广泛应用。C++语言表达简洁、灵活多样、计算性能高、平台支持度高,但同时C++语言类型复杂、变化多端、理解较困难,对初学者入门有一定难度。C++语言在2011年、2014年和2017年经历了三次语言标准升级,核心语言发生巨大变化,在改进传统的结构化编程和面向对象编程基础上引入了函数式编程和泛型编程,强类型弱化为静态类型,而编译器具有编译期运行能力,融合多种语言特征,如Java,NodeJS/ECMAScript,GO,Python等。因此,C++初学者和程序员都迫切需要重新理解掌握新标准C++语言的新概念和新规则。 本教材编写秉承“内容新颖,概念清晰,规则分明,指导性与实用性并重”的原则,所具特色如下: (1) 新概念:涵盖C++11全部新概念与C++14部分已实现概念; (2) 新平台:支持最新VS2017和DevC++(GCC)两大平台; (3) 新体系:新概念融入一个整体理论体系,使学生一次性掌握新概念和新规则; (4) 新展示:大量图表便于学生理解和教师讲授,且例题丰富,练习题形式多样。 本书共15章,主要分为以下两个部分: 第1部分(前8章),主要介绍结构化编程与函数式编程。其中,第1章概括列出新标准语言的新特征,有经验的读者可选择阅读;第2章到第7章介绍基本类型与变量,运算符与表达式,基本语句,函数和编译预处理,数组与字符串,结构、枚举和联合体;第8章介绍指针和引用,也介绍了基于Lambda的函数式编程。 第2部分(后7章),主要介绍面向对象编程与泛型编程。其中,第9章到第12章介绍新标准面向对象编程新特征;第13章介绍基于模板的泛型编程(这是C++难点集中之处);第14章介绍输入输出流,不涉及语言特征;第15章介绍异常处理。 本书各章后配有小结和练习题,供读者复习和实践。书中所有的编码实例都采用Visual Studio
2017/C++和DevC++(GCC)作为开发环境,前者新标准符合度高但规模庞大,后者短小实用但新标准符合度稍差,运行库支持不足。本书尝试将所有实例在两个平台上运行比较,但略有缺失。附录中给出ASCII码表和部分常用函数库,以方便读者查阅。 本书由南京理工大学计算机科学与工程学院软件工程系C++教学团队集体编写修订,获得南京理工大学“十三五”规划教材出版支持。在本书编写过程中编者得到多方支持,高锦博、高云等参与文字校对工作,在此向他们表示感谢。书中部分内容选自同行专家、学者的教材和专著,参考文献中力求全面列出,如有疏忽和遗漏,编者致以歉意并谨表感谢。本书不足之处,竭诚希望广大读者指正。 编者 2018年3月 3.目录 第1章概述1 11C++语言发展历史1 12一个简单的C++程序2 13C++程序的开发步骤3 14开发工具简介4 15C++标准及开发工具6 16C++11与C++14新特征7 17本书组织结构10 18类型大图及导读10 第2章基本类型与变量13 21关键字和标识符13 211关键字13 212标识符14 213标点符号15 214分隔符与标记15 22基本类型15 221逻辑型16 222字符型17 223整数型17 224浮点型18 225空类型19 23字面值19 231逻辑值19 232整型值19 233浮点值20 234字符值20 235字符串值22 24变量22 241变量的说明22 242变量的初始化23 243auto初始化23 244变量的赋值24 245变量的输入输出24 246命名常量27 小结27 练习题27 第3章运算符与表达式29 31基本运算符29 311算术运算符31 312关系运算符32 313逻辑运算符33 314位运算符34 315条件运算符36 316赋值运算符36 317逗号运算符37 318自增自减运算符37 319sizeof运算符39 3110typeid运算符39 3111其他运算符40 32表达式41 321左值表达式和右值表达式41 322表达式语句41 323表达式类型与decltype42 33类型转换42 331自动类型转换42 332赋值类型转换44 333强制类型转换45 小结46 练习题46 第4章基本语句49 41语句分类49 42结构化编程基本结构49 421顺序结构50 422选择结构50 423循环结构51 43选择语句52 431条件语句52 432switch语句55 44循环语句56 441while语句57 442dowhile语句58 443for语句59 444循环语句的比较60 445循环的嵌套60 45跳转语句61 451break语句61 452continue语句62 453goto语句与标号语句63 46综合示例63 小结66 练习题67 第5章函数和编译预处理69 51函数基本概念69 511库函数和用户定义函数69 512无参函数和有参函数69 513有返回函数和无返回函数70 52函数的定义70 521传统函数定义70 522函数定义的要点71 53函数的调用72 531函数调用的形式72 532函数调用的方式72 533函数调用与以值传递73 54函数重载74 541重载函数的定义75 542重载函数的调用75 55嵌套调用和递归调用76 551函数的嵌套调用76 552函数的递归调用77 56函数原型82 57auto函数与尾随返回类型83 58特殊参数84 581带缺省值的形参84 582可变参数85 59inline函数与constexpr函数87 591inline函数87 592constexpr函数87 510作用域88 5101局部作用域88 5102文件作用域与全局作用域运算符90 5103函数原型作用域90 5104函数作用域91 511程序运行期存储区域91 512存储类91 5121static变量与多文件项目92 5122extern变量94 5123thread_local变量95 5124存储类小结96 513编译预处理96 5131包含文件97 5132无参宏98 5133有参宏100 5134条件编译103 5135条件编译示例104 5136其他预处理指令105 小结106 练习题107 第6章数组与字符串111 61一维数组111 611一维数组的定义111 612一维数组的初始化112 613一维数组的访问113 614基于范围for语句114 615一维数组的应用115 616调用标准算法简化数组编程119 62二维数组121 621二维数组的定义121 622二维数组的初始化121 623二维数组的应用122 63数组与函数124 64容器vector与map127 641vector127 642map129 643初始化列表与统一初始化131 65字符数组与字符串132 651字符数组的定义132 652字符数组的初始化133 653字符数组的输入输出134 654字符数组的操作136 66字符串处理函数137 661字符数组处理函数137 662string类型139 663字符串应用示例140 小结142 练习题142 第7章结构、 枚举、 联合体146 71结构146 711结构类型的定义146 712说明结构变量149 713结构变量的初始化149 714结构变量的使用150 715结构的数组152 716结构中的静态成员155 717结构的嵌套定义157 718C++结构的构造函数与成员函数157 72位域159 721位域的定义159 722位域的使用161 73枚举162 731枚举类型及枚举变量162 732枚举的使用163 733强类型枚举165 74联合体166 741联合体类型的定义166 742联合体变量的说明及使用167 743非受限联合体169 75类型别名typedef与using170 小结171 练习题172 第8章指针和引用175 81指针及指针变量175 811指针概念与求址运算175 812指针变量的说明与初始化177 813指针的运算178 814用nullptr替代NULL182 82指针与结构182 821结构的指针182 822指针作为结构成员184 83指针与数组186 831用指针访问数组186 832指针与字符串189 833指针的数组191 84指针与函数198 841指针作为形参198 842函数返回指针199 843函数的指针200 85void指针与const指针203 851void指针204 852const指针205 86动态使用内存206 861new运算符206 862delete运算符208 863智能指针与垃圾回收GC211 87引用213 871左值引用213 872左值引用与数组、 指针的关系214 873左值引用与函数216 874指针与左值引用的对比220 875右值引用&&221 876引用类型绑定关系223 877auto推导与decltype推导规则224 88Lambda表达式226 881语法构造226 882简单用法228 883嵌套L式与高阶函数229 884调用STL算法230 小结231 练习题232 第9章类和对象239 91类239 911类的定义239 912类成员的可见性241 913类的数据成员242 914类的成员函数243 915类与结构的区别246 92对象247 921对象的创建247 922访问对象的成员248 923类与对象的关系249 93this指针249 94类中的其他内容250 小结251 练习题251 第10章类的成员253 101构造函数253 1011构造函数的定义253 1012缺省构造函数254 1013委托构造函数254 102析构函数255 103拷贝构造函数与拷贝赋值函数257 1031拷贝构造函数257 1032拷贝赋值函数259 1033浅拷贝与深拷贝261 1034用string替代char263 1035转换构造函数263 104移动构造函数与移动赋值函数265 1041移动语义265 1042移动构造函数266 1043移动赋值函数267 1044移动实例分析267 105特殊成员函数及其显式控制270 1051特殊成员函数总结270 1052特殊成员函数的显式控制272 106复合对象与成员对象274 1061复合类的构造与析构274 1062复合对象设计要点275 107对象数组276 1071定义和使用276 1072对象数组作为成员277 108静态成员277 1081静态数据成员277 1082静态成员函数279 109限定符280 1091限定符const280 1092限定符volatile282 1093引用限定符283 1010类成员的指针284 10101数据成员的指针284 10102成员函数的指针286 1011线程对象thread287 小结290 练习题290 第11章类的继承295 111继承与派生295 1111基类与派生类295 1112派生类的定义与构成296 1113继承方式与访问控制297 112派生类的构造和析构299 1121派生类的构造函数299 1122派生类继承构造函数301 1123派生类的析构过程302 113二义性问题与支配规则303 1131多继承造成的二义性303 1132支配规则304 1133导入基类成员305 114虚基类306 1141共同基类造成的二义性306 1142虚基类的说明307 1143虚基类的例子309 115子类型关系310 116虚函数313 1161虚函数定义和使用313 1162成员函数中调用虚函数316 1163构造函数中调用虚函数317 1164虚析构函数318 1165纯虚函数与抽象类319 1166final函数与类321 117标量、 平凡、 标准布局与POD322 118字面类型与constexpr对象324 119继承性设计要点325 小结327 练习题327 第12章运算符重载332 121一般运算符重载332 1211运算符重载函数332 1212双目运算符的重载333 1213单目运算符的重载334 122友元函数实现运算符336 1221友元friend336 1222友元运算符函数337 1223用户定义字面值UDL339 123特殊运算符重载341 1231类型转换函数341 1232下标运算符343 1233函数调用运算符344 1234new/delete运算符344 小结345 练习题346 第13章模板与STL348 131模板的概念348 132函数模板349 1321函数模板的定义349 1322函数模板的使用350 1323函数模板的显式特例化353 1324函数模板与有参宏的区别354 1325函数模板重载与SFINAE规则354 1326模板正确实例化与静态断言356 1327带缺省实参的函数模板357 1328可变参量的函数模板359 1329完美转发与引用折叠规则360 13210auto函数推导返回类型362 133类模板与别名模板364 1331类模板的定义364 1332类模板的使用365 1333显式特例化与部分特例化368 1334友元模板371 1335类模板的继承374 1336带缺省实参的类模板376 1337可变参量的类模板376 1338嵌套类模板377 1339别名模板378 134标准模板库STL379 1341容器概念379 1342迭代器381 1343容器的共同成员类型和操作382 1344算法383 1345基于C++11简化编程385 1346函数对象386 1347vector, deque和list387 1348set和multiset390 1349map和multimap393 135命名空间398 1351命名空间的定义398 1352空间中成员的访问399 1353inline命名空间400 小结401 练习题401 第14章输入输出流404 141概述404 1411流404 1412文件405 1413缓冲405 142基本流类405 1421基本流类体系405 1422预定义标准对象406 1423流的格式控制407 1424流的错误处理410 143标准输入/输出411 1431cin输入要点411 1432输入操作的成员函数412 1433cout输出要点414 1434输出操作的成员函数415 1435重载<<和>>运算符415 144文件流416 1441文件概述416 1442文件处理的一般过程416 1443文件的打开与关闭417 1444文本文件的使用419 1445二进制文件的使用422 1446文件的随机访问425 小结427 练习题427 第15章异常429 151异常的概念429 152异常类型的架构431 153异常处理语句432 1531throw语句432 1532trycatch语句434 1533异常处理的例子436 1534无异常noexcept439 154终止处理器440 155通用属性441 小结442 练习题442 附录AASCII码表445 表A1常用ASCII码表445 表A2ASCII控制字符446 附录B常用库函数447 表B1运行库的功能分类447 表B2运行库头文件448 表B3标准C++头文件449 表B4string类型450 表B5数学函数452 表B6C标准库453 表B7内存函数454 表B8时间函数与454 参考文献456 |
|
| ||||||
|
| ||||||
|
| ||||||
|
| ||||||