全書詳細介紹了和C++相關的C語言知識、類和對象、繼承、多態、模板和運算符重載,以及面向對象設計方法的概念,結合知識點簡要地討論了幾種常用的設計模式;針對重要概念精心設計了大量實例,涉及很多技巧和經驗。
本書不僅可以作為高等院校C++面向對象程序設計的教材,也是希望了解C++語言和面向對象程序設計知識的專業人員的參考書。
C++是一門非常重要的語言,有著許多不同語言的特性,它甚至可以上升到思想的高度,其思想被很多其他語言借鑒和沿襲。掌握了C++,學習其他語言就非常容易了。
本書內容覆蓋基本概念和方法,基本數據結構和面向對象的概念、方法和技巧。全書分為9章。第1章介紹面向對象程序設計的思想和基本概念。第2章介紹有關C++的一些知識,讓讀者們輕松地從C語言轉到C++。第3章介紹C++的一些基本知識,如名字空間、輸入輸出等。第4~6章介紹面向對象的三大主要特性: 封裝、繼承和多態。第7章介紹操作符重載,通過示例對常見的操作符重載進行分析。第8章介紹面向對象編程體系中的思想精髓——面向接口編程。第9章介紹模板相關知識。
本書全面而又系統地介紹了C++編程的基本知識,包括C++基本數據類型、基本語法和面向對象編程的基礎知識和技巧。無論是剛開始編程還是已有一些編程經驗,都會發現本書的精心安排使得學習C++變得快捷又輕松。
大多數教材都是按各部分內容邏輯上的先后順序進行組織的,各知識點比較孤立,跨度較大,容易使學生產生“只見樹木,不見森林”的感覺。針對這一問題,本書將知識點進一步細化分級,突出重點、難點,縮小臺階,達到深入淺出、循序漸進的目的。
本書針對已有C程序設計基礎,要學習C++面向對象程序設計的讀者。本書可作為高等學校C++面向對象程序設計課程的教材,也可作為工程技術人員的參考書。
本書具有以下特色:
(1) 內容整合。C、C++相融合。本書針對已有C語言基礎的學生,幫助其從C語言順利過渡到C++語言,涵蓋了C++語言的主要特征,使初學者能很快學習掌握C++。
(2) 知識體系完整,教學內容由淺入深,從易到難,循序漸進,層次分明,對每個C++的理論方法從需求到應用做了詳細的描述。
(3) 本書在內容組織上采用案例教學的思想,對C++中容易出錯的地方都用實例進行了講解。
(4) 本書配有電子課件、程序源代碼、習題參考答案。
本書中包含大量的示例代碼,其中大部分是完整程序,如無特殊聲明,該程序編譯和運行環境為Visual C++ 2012、32位Windows 7系統。
這里,特別感謝恩師范輝教授一直以來給予的關懷、教誨和啟迪。在初稿完成后,范輝教授仔細審閱后提出了很多寶貴意見,使本書更加完善。同時,對所有曾經鼓勵和幫助過我的領導、同事、專家、朋友表示誠摯的謝意。
由于時間倉促及作者水平有限,本書肯定有疏漏甚至錯誤之處,望專家和廣大讀者不吝指正。
作者
2015年10月
第1章緒論1
1.1程序設計語言1
1.2C++的發展歷史4
1.3面向過程程序設計語言5
1.4面向對象程序設計語言7
1.5類與抽象數據類型10
1.6繼承與多態10
1.7接口與組件11
習題12
第2章從C到C++13
2.1自定義數據類型13
2.1.1結構體13
2.1.2共用體28
2.1.3位域33
2.1.4枚舉39
2.1.5typedef聲明類型42
2.2函數46
2.2.1引用46
2.2.2參數傳遞方式52
2.2.3函數的重載57
2.2.4有默認參數的函數60
2.2.5內聯函數61
2.2.6函數調用棧結構65
2.2.7函數返回值69
2.2.8函數指針和指針函數78
2.2.9const修飾符88目錄◆C++面向對象程序設計(第2版)2.3函數和結構體97
2.3.1有函數的結構體97
2.3.2若干實例102
習題112
第3章C++語言初步114
3.1一個簡單的C++程序114
3.2名字空間115
3.2.1名字空間的定義117
3.2.2域操作符::118
3.2.3無名的名字空間120
3.2.4名字空間的別名121
3.2.5組合和選擇122
3.2.6名字空間和重載123
3.2.7名字查找124
3.2.8名字空間是開放的125
3.3輸入和輸出125
3.3.1cout輸出126
3.3.2cin輸入130
3.4string類型133
3.5new和delete140
3.6異常處理146
習題153
第4章類和對象156
4.1一個典型例子156
4.2類介紹162
4.3示例: Stack類173
4.4構造函數與析構函數176
4.4.1構造函數176
4.4.2復制構造函數182
4.4.3構造函數的初始化列表189
4.4.4析構函數192
4.4.5構造/析構函數的顯示調用200
4.5類的靜態成員203
4.6this指針211
4.7指向類成員的指針220
4.8成員對象和封閉類224
4.9常成員和常對象230
4.10引用成員236
4.11友元241
4.12局部類和嵌套類246
4.13C語言實現類的封裝253
習題256
第5章繼承和派生260
5.1介紹260
5.2基本概念與語法264
5.3派生類成員的訪問屬性268
5.3.1公有繼承269
5.3.2私有繼承274
5.3.3保護繼承279
5.3.4基類static成員的繼承281
5.3.5派生類的using聲明284
5.4派生類構造函數和析構函數287
5.4.1派生類構造函數287
5.4.2派生類析構函數294
5.4.3派生類復制構造函數295
5.4.4派生類和成員對象297
5.5多重繼承299
5.6繼承和組合310
5.7重載、隱藏和覆蓋318
5.8C語言實現繼承323
習題325
第6章多態性330
6.1多態的形式330
6.1.1靜態多態330
6.1.2動態多態333
6.2虛函數定義334
6.3虛函數和多態341
6.3.1虛函數多態的形式341
6.3.2動態聯編345
6.3.3多態的實現347
6.3.4構造函數中調用virtual函數352
6.3.5普通成員函數中調用虛函數355
6.3.6私有虛函數356
6.3.7虛析構函數362
6.3.8有默認參數的虛函數363
6.3.9虛函數和友元364
6.4純虛函數和抽象類369
6.4.1純虛函數定義369
6.4.2繼承的局限373
6.4.3接口的繼承和實現繼承375
6.5多態增強程序可擴充性的例子378
6.6dynamic_cast和static_cast389
6.7多重繼承和虛函數396
6.8C語言實現多態400
習題405
第7章運算符重載407
7.1運算符重載的定義407
7.2常用運算符的重載412
7.2.1下標運算符的重載412
7.2.2輸入輸出運算符重載414
7.2.3賦值運算符重載416
7.2.4關系運算符重載420
7.2.5new和delete運算符重載423
7.2.6解除引用運算符重載426
7.2.7函數運算符重載429
7.3運算符重載的注意事項438
習題442
第8章面向接口編程444
8.1接口與實現分離444
8.2代理模式448
8.3橋接模式453
8.4適配器模式461
8.5組合模式467
8.6觀察者模式470
習題478
第9章模板480
9.1函數模板480
9.2類模板490
9.3類模板實例: 隊列510
9.4模板的特化512
9.5模板和宏521
習題524
附錄AUML類圖526
參考文獻532