|
1.內(nèi)容提要 C++是國(guó)內(nèi)外廣泛采用的編程語(yǔ)言,應(yīng)用于多種計(jì)算平臺(tái),國(guó)內(nèi)很多高校都開(kāi)設(shè)C/C++編程的相關(guān)課程,也出現(xiàn)了數(shù)百種相關(guān)教材。C/C++語(yǔ)言在2011年之前主要采用C99和2003標(biāo)準(zhǔn)。2011年國(guó)際標(biāo)準(zhǔn)化組織和國(guó)際電工委員會(huì)發(fā)布了C++11新標(biāo)準(zhǔn),推出近百個(gè)新語(yǔ)言特征,之后C++14和C++17進(jìn)一步完善了新標(biāo)準(zhǔn)。新標(biāo)準(zhǔn)引入許多新概念、新規(guī)則,使得C++編程表達(dá)復(fù)雜多變,初學(xué)者感到學(xué)習(xí)實(shí)踐難度較大。本書(shū)采用研討加實(shí)踐的方式,力圖使初學(xué)者能熟練掌握新概念、新規(guī)則,并增強(qiáng)編程求解能力。 本書(shū)共15章,主要分為兩部分:第1部分(前8章)主要介紹結(jié)構(gòu)化編程和函數(shù)式編程,第2部分(后7章)主要介紹面向?qū)ο缶幊毯头盒途幊獭?/div> 本書(shū)可作為大學(xué)各學(xué)科專(zhuān)業(yè)學(xué)生學(xué)習(xí)實(shí)踐C++的基礎(chǔ)教材,也適合作為軟件工程開(kāi)發(fā)人員的自學(xué)用書(shū)和研究人員的參考用書(shū)。 2.前言 C++語(yǔ)言體現(xiàn)了當(dāng)前過(guò)程性編程語(yǔ)言的主導(dǎo)思想,并得到廣泛應(yīng)用。C++語(yǔ)言表達(dá)簡(jiǎn)潔、靈活多樣、計(jì)算性能高、平臺(tái)支持度高,但同時(shí)C++語(yǔ)言類(lèi)型復(fù)雜、變化多端、理解較困難,對(duì)初學(xué)者入門(mén)有一定難度。C++語(yǔ)言在2011年、2014年和2017年經(jīng)歷了三次語(yǔ)言標(biāo)準(zhǔn)升級(jí),核心語(yǔ)言發(fā)生巨大變化,在改進(jìn)傳統(tǒng)的結(jié)構(gòu)化編程和面向?qū)ο缶幊袒A(chǔ)上引入了函數(shù)式編程和泛型編程,強(qiáng)類(lèi)型弱化為靜態(tài)類(lèi)型,而編譯器具有編譯期運(yùn)行能力,融合多種語(yǔ)言特征,如Java,NodeJS/ECMAScript,GO,Python等。因此,C++初學(xué)者和程序員都迫切需要重新理解掌握新標(biāo)準(zhǔn)C++語(yǔ)言的新概念和新規(guī)則。 本教材編寫(xiě)秉承“內(nèi)容新穎,概念清晰,規(guī)則分明,指導(dǎo)性與實(shí)用性并重”的原則,所具特色如下: (1) 新概念:涵蓋C++11全部新概念與C++14部分已實(shí)現(xiàn)概念; (2) 新平臺(tái):支持最新VS2017和DevC++(GCC)兩大平臺(tái); (3) 新體系:新概念融入一個(gè)整體理論體系,使學(xué)生一次性掌握新概念和新規(guī)則; (4) 新展示:大量圖表便于學(xué)生理解和教師講授,且例題豐富,練習(xí)題形式多樣。 本書(shū)共15章,主要分為以下兩個(gè)部分: 第1部分(前8章),主要介紹結(jié)構(gòu)化編程與函數(shù)式編程。其中,第1章概括列出新標(biāo)準(zhǔn)語(yǔ)言的新特征,有經(jīng)驗(yàn)的讀者可選擇閱讀;第2章到第7章介紹基本類(lèi)型與變量,運(yùn)算符與表達(dá)式,基本語(yǔ)句,函數(shù)和編譯預(yù)處理,數(shù)組與字符串,結(jié)構(gòu)、枚舉和聯(lián)合體;第8章介紹指針和引用,也介紹了基于Lambda的函數(shù)式編程。 第2部分(后7章),主要介紹面向?qū)ο缶幊膛c泛型編程。其中,第9章到第12章介紹新標(biāo)準(zhǔn)面向?qū)ο缶幊绦绿卣?;?3章介紹基于模板的泛型編程(這是C++難點(diǎn)集中之處);第14章介紹輸入輸出流,不涉及語(yǔ)言特征;第15章介紹異常處理。 本書(shū)各章后配有小結(jié)和練習(xí)題,供讀者復(fù)習(xí)和實(shí)踐。書(shū)中所有的編碼實(shí)例都采用Visual Studio
2017/C++和DevC++(GCC)作為開(kāi)發(fā)環(huán)境,前者新標(biāo)準(zhǔn)符合度高但規(guī)模龐大,后者短小實(shí)用但新標(biāo)準(zhǔn)符合度稍差,運(yùn)行庫(kù)支持不足。本書(shū)嘗試將所有實(shí)例在兩個(gè)平臺(tái)上運(yùn)行比較,但略有缺失。附錄中給出ASCII碼表和部分常用函數(shù)庫(kù),以方便讀者查閱。 本書(shū)由南京理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院軟件工程系C++教學(xué)團(tuán)隊(duì)集體編寫(xiě)修訂,獲得南京理工大學(xué)“十三五”規(guī)劃教材出版支持。在本書(shū)編寫(xiě)過(guò)程中編者得到多方支持,高錦博、高云等參與文字校對(duì)工作,在此向他們表示感謝。書(shū)中部分內(nèi)容選自同行專(zhuān)家、學(xué)者的教材和專(zhuān)著,參考文獻(xiàn)中力求全面列出,如有疏忽和遺漏,編者致以歉意并謹(jǐn)表感謝。本書(shū)不足之處,竭誠(chéng)希望廣大讀者指正。 編者 2018年3月 3.目錄 第1章概述1 11C++語(yǔ)言發(fā)展歷史1 12一個(gè)簡(jiǎn)單的C++程序2 13C++程序的開(kāi)發(fā)步驟3 14開(kāi)發(fā)工具簡(jiǎn)介4 15C++標(biāo)準(zhǔn)及開(kāi)發(fā)工具6 16C++11與C++14新特征7 17本書(shū)組織結(jié)構(gòu)10 18類(lèi)型大圖及導(dǎo)讀10 第2章基本類(lèi)型與變量13 21關(guān)鍵字和標(biāo)識(shí)符13 211關(guān)鍵字13 212標(biāo)識(shí)符14 213標(biāo)點(diǎn)符號(hào)15 214分隔符與標(biāo)記15 22基本類(lèi)型15 221邏輯型16 222字符型17 223整數(shù)型17 224浮點(diǎn)型18 225空類(lèi)型19 23字面值19 231邏輯值19 232整型值19 233浮點(diǎn)值20 234字符值20 235字符串值22 24變量22 241變量的說(shuō)明22 242變量的初始化23 243auto初始化23 244變量的賦值24 245變量的輸入輸出24 246命名常量27 小結(jié)27 練習(xí)題27 第3章運(yùn)算符與表達(dá)式29 31基本運(yùn)算符29 311算術(shù)運(yùn)算符31 312關(guān)系運(yùn)算符32 313邏輯運(yùn)算符33 314位運(yùn)算符34 315條件運(yùn)算符36 316賦值運(yùn)算符36 317逗號(hào)運(yùn)算符37 318自增自減運(yùn)算符37 319sizeof運(yùn)算符39 3110typeid運(yùn)算符39 3111其他運(yùn)算符40 32表達(dá)式41 321左值表達(dá)式和右值表達(dá)式41 322表達(dá)式語(yǔ)句41 323表達(dá)式類(lèi)型與decltype42 33類(lèi)型轉(zhuǎn)換42 331自動(dòng)類(lèi)型轉(zhuǎn)換42 332賦值類(lèi)型轉(zhuǎn)換44 333強(qiáng)制類(lèi)型轉(zhuǎn)換45 小結(jié)46 練習(xí)題46 第4章基本語(yǔ)句49 41語(yǔ)句分類(lèi)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選擇語(yǔ)句52 431條件語(yǔ)句52 432switch語(yǔ)句55 44循環(huán)語(yǔ)句56 441while語(yǔ)句57 442dowhile語(yǔ)句58 443for語(yǔ)句59 444循環(huán)語(yǔ)句的比較60 445循環(huán)的嵌套60 45跳轉(zhuǎn)語(yǔ)句61 451break語(yǔ)句61 452continue語(yǔ)句62 453goto語(yǔ)句與標(biāo)號(hào)語(yǔ)句63 46綜合示例63 小結(jié)66 練習(xí)題67 第5章函數(shù)和編譯預(yù)處理69 51函數(shù)基本概念69 511庫(kù)函數(shù)和用戶(hù)定義函數(shù)69 512無(wú)參函數(shù)和有參函數(shù)69 513有返回函數(shù)和無(wú)返回函數(shù)70 52函數(shù)的定義70 521傳統(tǒng)函數(shù)定義70 522函數(shù)定義的要點(diǎn)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ù)與尾隨返回類(lèi)型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文件作用域與全局作用域運(yùn)算符90 5103函數(shù)原型作用域90 5104函數(shù)作用域91 511程序運(yùn)行期存儲(chǔ)區(qū)域91 512存儲(chǔ)類(lèi)91 5121static變量與多文件項(xiàng)目92 5122extern變量94 5123thread_local變量95 5124存儲(chǔ)類(lèi)小結(jié)96 513編譯預(yù)處理96 5131包含文件97 5132無(wú)參宏98 5133有參宏100 5134條件編譯103 5135條件編譯示例104 5136其他預(yù)處理指令105 小結(jié)106 練習(xí)題107 第6章數(shù)組與字符串111 61一維數(shù)組111 611一維數(shù)組的定義111 612一維數(shù)組的初始化112 613一維數(shù)組的訪問(wèn)113 614基于范圍for語(yǔ)句114 615一維數(shù)組的應(yīng)用115 616調(diào)用標(biāo)準(zhǔn)算法簡(jiǎn)化數(shù)組編程119 62二維數(shù)組121 621二維數(shù)組的定義121 622二維數(shù)組的初始化121 623二維數(shù)組的應(yīng)用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類(lèi)型139 663字符串應(yīng)用示例140 小結(jié)142 練習(xí)題142 第7章結(jié)構(gòu)、 枚舉、 聯(lián)合體146 71結(jié)構(gòu)146 711結(jié)構(gòu)類(lèi)型的定義146 712說(shuō)明結(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枚舉類(lèi)型及枚舉變量162 732枚舉的使用163 733強(qiáng)類(lèi)型枚舉165 74聯(lián)合體166 741聯(lián)合體類(lèi)型的定義166 742聯(lián)合體變量的說(shuō)明及使用167 743非受限聯(lián)合體169 75類(lèi)型別名typedef與using170 小結(jié)171 練習(xí)題172 第8章指針和引用175 81指針及指針變量175 811指針概念與求址運(yùn)算175 812指針變量的說(shuō)明與初始化177 813指針的運(yùn)算178 814用nullptr替代NULL182 82指針與結(jié)構(gòu)182 821結(jié)構(gòu)的指針182 822指針作為結(jié)構(gòu)成員184 83指針與數(shù)組186 831用指針訪問(wèn)數(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動(dòng)態(tài)使用內(nèi)存206 861new運(yùn)算符206 862delete運(yùn)算符208 863智能指針與垃圾回收GC211 87引用213 871左值引用213 872左值引用與數(shù)組、 指針的關(guān)系214 873左值引用與函數(shù)216 874指針與左值引用的對(duì)比220 875右值引用&&221 876引用類(lèi)型綁定關(guān)系223 877auto推導(dǎo)與decltype推導(dǎo)規(guī)則224 88Lambda表達(dá)式226 881語(yǔ)法構(gòu)造226 882簡(jiǎn)單用法228 883嵌套L式與高階函數(shù)229 884調(diào)用STL算法230 小結(jié)231 練習(xí)題232 第9章類(lèi)和對(duì)象239 91類(lèi)239 911類(lèi)的定義239 912類(lèi)成員的可見(jiàn)性241 913類(lèi)的數(shù)據(jù)成員242 914類(lèi)的成員函數(shù)243 915類(lèi)與結(jié)構(gòu)的區(qū)別246 92對(duì)象247 921對(duì)象的創(chuàng)建247 922訪問(wèn)對(duì)象的成員248 923類(lèi)與對(duì)象的關(guān)系249 93this指針249 94類(lèi)中的其他內(nèi)容250 小結(jié)251 練習(xí)題251 第10章類(lèi)的成員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移動(dòng)構(gòu)造函數(shù)與移動(dòng)賦值函數(shù)265 1041移動(dòng)語(yǔ)義265 1042移動(dòng)構(gòu)造函數(shù)266 1043移動(dòng)賦值函數(shù)267 1044移動(dòng)實(shí)例分析267 105特殊成員函數(shù)及其顯式控制270 1051特殊成員函數(shù)總結(jié)270 1052特殊成員函數(shù)的顯式控制272 106復(fù)合對(duì)象與成員對(duì)象274 1061復(fù)合類(lèi)的構(gòu)造與析構(gòu)274 1062復(fù)合對(duì)象設(shè)計(jì)要點(diǎn)275 107對(duì)象數(shù)組276 1071定義和使用276 1072對(duì)象數(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類(lèi)成員的指針284 10101數(shù)據(jù)成員的指針284 10102成員函數(shù)的指針286 1011線程對(duì)象thread287 小結(jié)290 練習(xí)題290 第11章類(lèi)的繼承295 111繼承與派生295 1111基類(lèi)與派生類(lèi)295 1112派生類(lèi)的定義與構(gòu)成296 1113繼承方式與訪問(wèn)控制297 112派生類(lèi)的構(gòu)造和析構(gòu)299 1121派生類(lèi)的構(gòu)造函數(shù)299 1122派生類(lèi)繼承構(gòu)造函數(shù)301 1123派生類(lèi)的析構(gòu)過(guò)程302 113二義性問(wèn)題與支配規(guī)則303 1131多繼承造成的二義性303 1132支配規(guī)則304 1133導(dǎo)入基類(lèi)成員305 114虛基類(lèi)306 1141共同基類(lèi)造成的二義性306 1142虛基類(lèi)的說(shuō)明307 1143虛基類(lèi)的例子309 115子類(lèi)型關(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ù)與抽象類(lèi)319 1166final函數(shù)與類(lèi)321 117標(biāo)量、 平凡、 標(biāo)準(zhǔn)布局與POD322 118字面類(lèi)型與constexpr對(duì)象324 119繼承性設(shè)計(jì)要點(diǎn)325 小結(jié)327 練習(xí)題327 第12章運(yùn)算符重載332 121一般運(yùn)算符重載332 1211運(yùn)算符重載函數(shù)332 1212雙目運(yùn)算符的重載333 1213單目運(yùn)算符的重載334 122友元函數(shù)實(shí)現(xiàn)運(yùn)算符336 1221友元friend336 1222友元運(yùn)算符函數(shù)337 1223用戶(hù)定義字面值UDL339 123特殊運(yùn)算符重載341 1231類(lèi)型轉(zhuǎn)換函數(shù)341 1232下標(biāo)運(yùn)算符343 1233函數(shù)調(diào)用運(yùn)算符344 1234new/delete運(yùn)算符344 小結(jié)345 練習(xí)題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模板正確實(shí)例化與靜態(tài)斷言356 1327帶缺省實(shí)參的函數(shù)模板357 1328可變參量的函數(shù)模板359 1329完美轉(zhuǎn)發(fā)與引用折疊規(guī)則360 13210auto函數(shù)推導(dǎo)返回類(lèi)型362 133類(lèi)模板與別名模板364 1331類(lèi)模板的定義364 1332類(lèi)模板的使用365 1333顯式特例化與部分特例化368 1334友元模板371 1335類(lèi)模板的繼承374 1336帶缺省實(shí)參的類(lèi)模板376 1337可變參量的類(lèi)模板376 1338嵌套類(lèi)模板377 1339別名模板378 134標(biāo)準(zhǔn)模板庫(kù)STL379 1341容器概念379 1342迭代器381 1343容器的共同成員類(lèi)型和操作382 1344算法383 1345基于C++11簡(jiǎn)化編程385 1346函數(shù)對(duì)象386 1347vector, deque和list387 1348set和multiset390 1349map和multimap393 135命名空間398 1351命名空間的定義398 1352空間中成員的訪問(wèn)399 1353inline命名空間400 小結(jié)401 練習(xí)題401 第14章輸入輸出流404 141概述404 1411流404 1412文件405 1413緩沖405 142基本流類(lèi)405 1421基本流類(lèi)體系405 1422預(yù)定義標(biāo)準(zhǔn)對(duì)象406 1423流的格式控制407 1424流的錯(cuò)誤處理410 143標(biāo)準(zhǔn)輸入/輸出411 1431cin輸入要點(diǎn)411 1432輸入操作的成員函數(shù)412 1433cout輸出要點(diǎn)414 1434輸出操作的成員函數(shù)415 1435重載<<和>>運(yùn)算符415 144文件流416 1441文件概述416 1442文件處理的一般過(guò)程416 1443文件的打開(kāi)與關(guān)閉417 1444文本文件的使用419 1445二進(jìn)制文件的使用422 1446文件的隨機(jī)訪問(wèn)425 小結(jié)427 練習(xí)題427 第15章異常429 151異常的概念429 152異常類(lèi)型的架構(gòu)431 153異常處理語(yǔ)句432 1531throw語(yǔ)句432 1532trycatch語(yǔ)句434 1533異常處理的例子436 1534無(wú)異常noexcept439 154終止處理器440 155通用屬性441 小結(jié)442 練習(xí)題442 附錄AASCII碼表445 表A1常用ASCII碼表445 表A2ASCII控制字符446 附錄B常用庫(kù)函數(shù)447 表B1運(yùn)行庫(kù)的功能分類(lèi)447 表B2運(yùn)行庫(kù)頭文件448 表B3標(biāo)準(zhǔn)C++頭文件449 表B4string類(lèi)型450 表B5數(shù)學(xué)函數(shù)452 表B6C標(biāo)準(zhǔn)庫(kù)453 表B7內(nèi)存函數(shù)454 表B8時(shí)間函數(shù)與454 參考文獻(xiàn)456 |
|
| ||||||
|
| ||||||
|
| ||||||
|
| ||||||