|
1.內(nèi)容提要 C++是國內(nèi)外廣泛采用的編程語言,應用于多種計算平臺,國內(nèi)很多高校都開設(shè)C/C++編程的相關(guān)課程,也出現(xiàn)了數(shù)百種相關(guān)教材。C/C++語言在2011年之前主要采用C99和2003標準。2011年國際標準化組織和國際電工委員會發(fā)布了C++11新標準,推出近百個新語言特征,之后C++14和C++17進一步完善了新標準。新標準引入許多新概念、新規(guī)則,使得C++編程表達復雜多變,初學者感到學習實踐難度較大。本書采用研討加實踐的方式,力圖使初學者能熟練掌握新概念、新規(guī)則,并增強編程求解能力。 本書共15章,主要分為兩部分:第1部分(前8章)主要介紹結(jié)構(gòu)化編程和函數(shù)式編程,第2部分(后7章)主要介紹面向?qū)ο缶幊毯头盒途幊獭?/div> 本書可作為大學各學科專業(yè)學生學習實踐C++的基礎(chǔ)教材,也適合作為軟件工程開發(fā)人員的自學用書和研究人員的參考用書。 2.前言 C++語言體現(xiàn)了當前過程性編程語言的主導思想,并得到廣泛應用。C++語言表達簡潔、靈活多樣、計算性能高、平臺支持度高,但同時C++語言類型復雜、變化多端、理解較困難,對初學者入門有一定難度。C++語言在2011年、2014年和2017年經(jīng)歷了三次語言標準升級,核心語言發(fā)生巨大變化,在改進傳統(tǒng)的結(jié)構(gòu)化編程和面向?qū)ο缶幊袒A(chǔ)上引入了函數(shù)式編程和泛型編程,強類型弱化為靜態(tài)類型,而編譯器具有編譯期運行能力,融合多種語言特征,如Java,NodeJS/ECMAScript,GO,Python等。因此,C++初學者和程序員都迫切需要重新理解掌握新標準C++語言的新概念和新規(guī)則。 本教材編寫秉承“內(nèi)容新穎,概念清晰,規(guī)則分明,指導性與實用性并重”的原則,所具特色如下: (1) 新概念:涵蓋C++11全部新概念與C++14部分已實現(xiàn)概念; (2) 新平臺:支持最新VS2017和DevC++(GCC)兩大平臺; (3) 新體系:新概念融入一個整體理論體系,使學生一次性掌握新概念和新規(guī)則; (4) 新展示:大量圖表便于學生理解和教師講授,且例題豐富,練習題形式多樣。 本書共15章,主要分為以下兩個部分: 第1部分(前8章),主要介紹結(jié)構(gòu)化編程與函數(shù)式編程。其中,第1章概括列出新標準語言的新特征,有經(jīng)驗的讀者可選擇閱讀;第2章到第7章介紹基本類型與變量,運算符與表達式,基本語句,函數(shù)和編譯預處理,數(shù)組與字符串,結(jié)構(gòu)、枚舉和聯(lián)合體;第8章介紹指針和引用,也介紹了基于Lambda的函數(shù)式編程。 第2部分(后7章),主要介紹面向?qū)ο缶幊膛c泛型編程。其中,第9章到第12章介紹新標準面向?qū)ο缶幊绦绿卣?;?3章介紹基于模板的泛型編程(這是C++難點集中之處);第14章介紹輸入輸出流,不涉及語言特征;第15章介紹異常處理。 本書各章后配有小結(jié)和練習題,供讀者復習和實踐。書中所有的編碼實例都采用Visual Studio
2017/C++和DevC++(GCC)作為開發(fā)環(huán)境,前者新標準符合度高但規(guī)模龐大,后者短小實用但新標準符合度稍差,運行庫支持不足。本書嘗試將所有實例在兩個平臺上運行比較,但略有缺失。附錄中給出ASCII碼表和部分常用函數(shù)庫,以方便讀者查閱。 本書由南京理工大學計算機科學與工程學院軟件工程系C++教學團隊集體編寫修訂,獲得南京理工大學“十三五”規(guī)劃教材出版支持。在本書編寫過程中編者得到多方支持,高錦博、高云等參與文字校對工作,在此向他們表示感謝。書中部分內(nèi)容選自同行專家、學者的教材和專著,參考文獻中力求全面列出,如有疏忽和遺漏,編者致以歉意并謹表感謝。本書不足之處,竭誠希望廣大讀者指正。 編者 2018年3月 3.目錄 第1章概述1 11C++語言發(fā)展歷史1 12一個簡單的C++程序2 13C++程序的開發(fā)步驟3 14開發(fā)工具簡介4 15C++標準及開發(fā)工具6 16C++11與C++14新特征7 17本書組織結(jié)構(gòu)10 18類型大圖及導讀10 第2章基本類型與變量13 21關(guān)鍵字和標識符13 211關(guān)鍵字13 212標識符14 213標點符號15 214分隔符與標記15 22基本類型15 221邏輯型16 222字符型17 223整數(shù)型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 小結(jié)27 練習題27 第3章運算符與表達式29 31基本運算符29 311算術(shù)運算符31 312關(guān)系運算符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類型轉(zhuǎn)換42 331自動類型轉(zhuǎn)換42 332賦值類型轉(zhuǎn)換44 333強制類型轉(zhuǎn)換45 小結(jié)46 練習題46 第4章基本語句49 41語句分類49 42結(jié)構(gòu)化編程基本結(jié)構(gòu)49 421順序結(jié)構(gòu)50 422選擇結(jié)構(gòu)50 423循環(huán)結(jié)構(gòu)51 43選擇語句52 431條件語句52 432switch語句55 44循環(huán)語句56 441while語句57 442dowhile語句58 443for語句59 444循環(huán)語句的比較60 445循環(huán)的嵌套60 45跳轉(zhuǎn)語句61 451break語句61 452continue語句62 453goto語句與標號語句63 46綜合示例63 小結(jié)66 練習題67 第5章函數(shù)和編譯預處理69 51函數(shù)基本概念69 511庫函數(shù)和用戶定義函數(shù)69 512無參函數(shù)和有參函數(shù)69 513有返回函數(shù)和無返回函數(shù)70 52函數(shù)的定義70 521傳統(tǒng)函數(shù)定義70 522函數(shù)定義的要點71 53函數(shù)的調(diào)用72 531函數(shù)調(diào)用的形式72 532函數(shù)調(diào)用的方式72 533函數(shù)調(diào)用與以值傳遞73 54函數(shù)重載74 541重載函數(shù)的定義75 542重載函數(shù)的調(diào)用75 55嵌套調(diào)用和遞歸調(diào)用76 551函數(shù)的嵌套調(diào)用76 552函數(shù)的遞歸調(diào)用77 56函數(shù)原型82 57auto函數(shù)與尾隨返回類型83 58特殊參數(shù)84 581帶缺省值的形參84 582可變參數(shù)85 59inline函數(shù)與constexpr函數(shù)87 591inline函數(shù)87 592constexpr函數(shù)87 510作用域88 5101局部作用域88 5102文件作用域與全局作用域運算符90 5103函數(shù)原型作用域90 5104函數(shù)作用域91 511程序運行期存儲區(qū)域91 512存儲類91 5121static變量與多文件項目92 5122extern變量94 5123thread_local變量95 5124存儲類小結(jié)96 513編譯預處理96 5131包含文件97 5132無參宏98 5133有參宏100 5134條件編譯103 5135條件編譯示例104 5136其他預處理指令105 小結(jié)106 練習題107 第6章數(shù)組與字符串111 61一維數(shù)組111 611一維數(shù)組的定義111 612一維數(shù)組的初始化112 613一維數(shù)組的訪問113 614基于范圍for語句114 615一維數(shù)組的應用115 616調(diào)用標準算法簡化數(shù)組編程119 62二維數(shù)組121 621二維數(shù)組的定義121 622二維數(shù)組的初始化121 623二維數(shù)組的應用122 63數(shù)組與函數(shù)124 64容器vector與map127 641vector127 642map129 643初始化列表與統(tǒng)一初始化131 65字符數(shù)組與字符串132 651字符數(shù)組的定義132 652字符數(shù)組的初始化133 653字符數(shù)組的輸入輸出134 654字符數(shù)組的操作136 66字符串處理函數(shù)137 661字符數(shù)組處理函數(shù)137 662string類型139 663字符串應用示例140 小結(jié)142 練習題142 第7章結(jié)構(gòu)、 枚舉、 聯(lián)合體146 71結(jié)構(gòu)146 711結(jié)構(gòu)類型的定義146 712說明結(jié)構(gòu)變量149 713結(jié)構(gòu)變量的初始化149 714結(jié)構(gòu)變量的使用150 715結(jié)構(gòu)的數(shù)組152 716結(jié)構(gòu)中的靜態(tài)成員155 717結(jié)構(gòu)的嵌套定義157 718C++結(jié)構(gòu)的構(gòu)造函數(shù)與成員函數(shù)157 72位域159 721位域的定義159 722位域的使用161 73枚舉162 731枚舉類型及枚舉變量162 732枚舉的使用163 733強類型枚舉165 74聯(lián)合體166 741聯(lián)合體類型的定義166 742聯(lián)合體變量的說明及使用167 743非受限聯(lián)合體169 75類型別名typedef與using170 小結(jié)171 練習題172 第8章指針和引用175 81指針及指針變量175 811指針概念與求址運算175 812指針變量的說明與初始化177 813指針的運算178 814用nullptr替代NULL182 82指針與結(jié)構(gòu)182 821結(jié)構(gòu)的指針182 822指針作為結(jié)構(gòu)成員184 83指針與數(shù)組186 831用指針訪問數(shù)組186 832指針與字符串189 833指針的數(shù)組191 84指針與函數(shù)198 841指針作為形參198 842函數(shù)返回指針199 843函數(shù)的指針200 85void指針與const指針203 851void指針204 852const指針205 86動態(tài)使用內(nèi)存206 861new運算符206 862delete運算符208 863智能指針與垃圾回收GC211 87引用213 871左值引用213 872左值引用與數(shù)組、 指針的關(guān)系214 873左值引用與函數(shù)216 874指針與左值引用的對比220 875右值引用&&221 876引用類型綁定關(guān)系223 877auto推導與decltype推導規(guī)則224 88Lambda表達式226 881語法構(gòu)造226 882簡單用法228 883嵌套L式與高階函數(shù)229 884調(diào)用STL算法230 小結(jié)231 練習題232 第9章類和對象239 91類239 911類的定義239 912類成員的可見性241 913類的數(shù)據(jù)成員242 914類的成員函數(shù)243 915類與結(jié)構(gòu)的區(qū)別246 92對象247 921對象的創(chuàng)建247 922訪問對象的成員248 923類與對象的關(guān)系249 93this指針249 94類中的其他內(nèi)容250 小結(jié)251 練習題251 第10章類的成員253 101構(gòu)造函數(shù)253 1011構(gòu)造函數(shù)的定義253 1012缺省構(gòu)造函數(shù)254 1013委托構(gòu)造函數(shù)254 102析構(gòu)函數(shù)255 103拷貝構(gòu)造函數(shù)與拷貝賦值函數(shù)257 1031拷貝構(gòu)造函數(shù)257 1032拷貝賦值函數(shù)259 1033淺拷貝與深拷貝261 1034用string替代char263 1035轉(zhuǎn)換構(gòu)造函數(shù)263 104移動構(gòu)造函數(shù)與移動賦值函數(shù)265 1041移動語義265 1042移動構(gòu)造函數(shù)266 1043移動賦值函數(shù)267 1044移動實例分析267 105特殊成員函數(shù)及其顯式控制270 1051特殊成員函數(shù)總結(jié)270 1052特殊成員函數(shù)的顯式控制272 106復合對象與成員對象274 1061復合類的構(gòu)造與析構(gòu)274 1062復合對象設(shè)計要點275 107對象數(shù)組276 1071定義和使用276 1072對象數(shù)組作為成員277 108靜態(tài)成員277 1081靜態(tài)數(shù)據(jù)成員277 1082靜態(tài)成員函數(shù)279 109限定符280 1091限定符const280 1092限定符volatile282 1093引用限定符283 1010類成員的指針284 10101數(shù)據(jù)成員的指針284 10102成員函數(shù)的指針286 1011線程對象thread287 小結(jié)290 練習題290 第11章類的繼承295 111繼承與派生295 1111基類與派生類295 1112派生類的定義與構(gòu)成296 1113繼承方式與訪問控制297 112派生類的構(gòu)造和析構(gòu)299 1121派生類的構(gòu)造函數(shù)299 1122派生類繼承構(gòu)造函數(shù)301 1123派生類的析構(gòu)過程302 113二義性問題與支配規(guī)則303 1131多繼承造成的二義性303 1132支配規(guī)則304 1133導入基類成員305 114虛基類306 1141共同基類造成的二義性306 1142虛基類的說明307 1143虛基類的例子309 115子類型關(guān)系310 116虛函數(shù)313 1161虛函數(shù)定義和使用313 1162成員函數(shù)中調(diào)用虛函數(shù)316 1163構(gòu)造函數(shù)中調(diào)用虛函數(shù)317 1164虛析構(gòu)函數(shù)318 1165純虛函數(shù)與抽象類319 1166final函數(shù)與類321 117標量、 平凡、 標準布局與POD322 118字面類型與constexpr對象324 119繼承性設(shè)計要點325 小結(jié)327 練習題327 第12章運算符重載332 121一般運算符重載332 1211運算符重載函數(shù)332 1212雙目運算符的重載333 1213單目運算符的重載334 122友元函數(shù)實現(xiàn)運算符336 1221友元friend336 1222友元運算符函數(shù)337 1223用戶定義字面值UDL339 123特殊運算符重載341 1231類型轉(zhuǎn)換函數(shù)341 1232下標運算符343 1233函數(shù)調(diào)用運算符344 1234new/delete運算符344 小結(jié)345 練習題346 第13章模板與STL348 131模板的概念348 132函數(shù)模板349 1321函數(shù)模板的定義349 1322函數(shù)模板的使用350 1323函數(shù)模板的顯式特例化353 1324函數(shù)模板與有參宏的區(qū)別354 1325函數(shù)模板重載與SFINAE規(guī)則354 1326模板正確實例化與靜態(tài)斷言356 1327帶缺省實參的函數(shù)模板357 1328可變參量的函數(shù)模板359 1329完美轉(zhuǎn)發(fā)與引用折疊規(guī)則360 13210auto函數(shù)推導返回類型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函數(shù)對象386 1347vector, deque和list387 1348set和multiset390 1349map和multimap393 135命名空間398 1351命名空間的定義398 1352空間中成員的訪問399 1353inline命名空間400 小結(jié)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輸入操作的成員函數(shù)412 1433cout輸出要點414 1434輸出操作的成員函數(shù)415 1435重載<<和>>運算符415 144文件流416 1441文件概述416 1442文件處理的一般過程416 1443文件的打開與關(guān)閉417 1444文本文件的使用419 1445二進制文件的使用422 1446文件的隨機訪問425 小結(jié)427 練習題427 第15章異常429 151異常的概念429 152異常類型的架構(gòu)431 153異常處理語句432 1531throw語句432 1532trycatch語句434 1533異常處理的例子436 1534無異常noexcept439 154終止處理器440 155通用屬性441 小結(jié)442 練習題442 附錄AASCII碼表445 表A1常用ASCII碼表445 表A2ASCII控制字符446 附錄B常用庫函數(shù)447 表B1運行庫的功能分類447 表B2運行庫頭文件448 表B3標準C++頭文件449 表B4string類型450 表B5數(shù)學函數(shù)452 表B6C標準庫453 表B7內(nèi)存函數(shù)454 表B8時間函數(shù)與454 參考文獻456 |
|
| ||||||
|
| ||||||
|
| ||||||
|
| ||||||