C++語言是在C語言的基礎上發展起來的面向對象程序設計語言,它不僅可以編寫應用軟件,而且特別適合于編寫系統軟件。本書共由10章組成,按照循序漸進的原則,逐步而系統地介紹C++語言的基本概念和語法規則,特別是用了大量的篇幅來詳細講解面向對象程序設計的基本概念,包括類、繼承、多態和重載等,并利用單獨的一章來專門介紹類的設計,使讀者在學完本書后,能盡快應用C++語言來解決實際問題。本書是作者根據多年的C++語言教學經驗和實踐體會編寫而成的,在內容編排上盡量體現易學的特點,在文字敘述上力求條理清晰、簡潔,便于讀者閱讀。
本書可以作為大專院校計算機專業或非計算機專業教材及教學參考書,也可作為自學用書。
隨著計算機技術的不斷發展以及軟件程序的高度復雜化,面向對象程序設計的重要性也越來越突現出來,而C++語言則是面向對象程序設計的最重要的代表性語言之一。
C++語言是在被廣泛應用的C語言的基礎上發展起來的。C++語言是在C語言已有的功能的基礎上,強化了C語言的基本功能,特別是增加了對類的處理能力,即:
C++=C+基本功能的擴充+類的功能
從這一公式不難看出,C++語言幾乎完全繼承了C語言的所有功能。從表面上看來,由于C++語言繼承了C語言的所有功能,因此,只要學會了C語言,就應該很容易學會C++語言,其實不然。就類本身來講,就包含很多復雜的概念,而對于這些概念的正確理解則是學好面向對象程序設計語言的關鍵,同時,C語言是面向函數的程序設計語言,而C++語言則是面向對象的程序設計語言,這樣,在程序設計方法上也有很大差別。
本書是在多年講授的C++語言教案的基礎上,廣泛聽取讀者和同行的建議,并參考最新材料經系統整理而成的。盡管大部分讀者可能都學過C語言,但考慮到C++語言作為一門獨立的課程應具有其系統性,因此本書系統地介紹了C++語言的各種語法成分和程序設計特點,在內容編排上,按照循序漸進的原則,逐步介紹了C++語言的基本概念和理論,在內容的安排上,盡可能考慮讀者的接受能力,使整個學習過程按照從簡單到復雜的順序進行。為了使讀者能夠盡快利用C++語言來解決實際問題,本書的每一章都給出了大量的例題,這些例題對于理解C++語言的語法現象、完整掌握C++語言的特點非常有益。同時,考慮到面向對象程序設計語言的特點,第8章專門介紹類的設計,所給出的幾個例子都是具有代表性的并具有實用價值的,通過對這些實例的學習,能夠幫助讀者進一步掌握面向對象程序設計的要點,并能達到舉一反三的目的。
本書共由10章組成,按照循序漸進的原則,逐步介紹C++語言的基本概念和語法規則,特別是用了大量的篇幅來詳細講解面向對象程序設計的基本概念,包括類、繼承、多態和重載等。書中的所有例題都在Visual C++環境下測試完成。每章的最后也都附有一定量的習題,這些習題對于讀者鞏固已學的內容大有益處。
作者認為,要學好C++語言,除了掌握C++語言的基本理論之外,還必須要加強實踐環節,讀者可以邊學習邊上機,剛開始時可以調試本書中的例題,待學習一段時間之后,就可以調試自己編寫的程序了,只有這樣,才能加快學習進度,提高學習效率。
由于作者水平有限,經驗不足,書中一定有不少疏漏和不足,敬請有關老師、計算機工作者和廣大讀者批評指正。
作者2015年10月于大連理工大學
第1章緒言
1.1面向對象程序設計的特點
1.2C++語言程序的開發過程
1.3C++語言程序的結構
習題
第2章數據類型、運算符和基本語句
2.1基本概念
2.1.1標識符
2.1.2常量
2.1.3變量
2.1.4關鍵字
2.2基本數據類型
2.2.1整型變量及其常量
2.2.2浮點型變量及其常量
2.2.3字符型變量及其常量
2.2.4void型數據
2.2.5bool型變量及其常量
2.3long、short、signed、unsigned關鍵字
2.3.1long和short關鍵字
2.3.2signed和unsigned關鍵字
2.4枚舉
2.5const關鍵字
2.6volatile關鍵字
2.7typedef關鍵字
2.8不同類型數據之間的轉換
2.8.1自動類型轉換
2.8.2強制類型轉換
2.9運算符
2.9.1算術運算符
2.9.2增1、減1運算符
2.9.3關系運算符
2.9.4邏輯運算符
2.9.5位運算符
2.9.6賦值運算符
2.9.7條件運算符
2.9.8逗號運算符
2.9.9sizeof運算符
2.9.10指針運算符
2.9.11成員訪問運算符
2.10基本語句
2.10.1語句、復合語句和空語句
2.10.2if語句
2.10.3switch語句
2.10.4while語句
2.10.5for語句
2.10.6dowhile語句
2.10.7break語句
2.10.8continue語句
2.10.9goto語句
2.10.10return語句
習題
第3章數據的輸入和輸出
3.1標準輸入和輸出
3.1.1基于運算符<<和>>的輸入輸出
3.1.2字符的輸入get( )和輸出put( )
3.1.3字符串的輸入get( )和getline( )
3.2文件
3.2.1文件的打開和關閉
3.2.2文件的輸入和輸出
3.2.3錯誤處理
習題
第4章數組、指針和引用
4.1數組
4.1.1一維數組
4.1.2二維數組
4.1.3字符數組和字符串
4.2指針
4.2.1指針的基本概念
4.2.2void型指針
4.2.3二級指針
4.2.4指針和數組
4.3引用
4.4內存的申請與釋放
習題
第5章函數
5.1函數的定義和調用
5.2函數的返回值及其類型
5.2.1函數返回值
5.2.2函數返回指針
5.2.3函數返回引用
5.3函數原型
5.4函數的參數及其傳遞方式
5.4.1將值傳遞給函數
5.4.2將常量傳遞給函數
5.4.3將指針傳遞給函數
5.4.4將引用傳遞給函數
5.4.5將數組傳遞給函數
5.5函數的遞歸調用
5.6變量的作用域和存儲類
5.6.1變量的作用域
5.6.2變量的存儲類
5.7無參函數和默認參數
5.8函數的重載
5.9inline函數
5.10外部函數和靜態函數
習題
第6章類
6.1類的定義
6.2公共、私有和保護
6.3數據成員和成員函數
6.3.1成員函數的使用
6.3.2成員函數的內部定義和外部定義
6.3.3數據成員的保護
6.4構造函數和析構函數
6.4.1構造函數
6.4.2析構函數
6.5復制構造函數
6.5.1復制構造函數的說明和定義
6.5.2默認復制構造函數
6.5.3復制構造函數的進一步說明
6.6變換構造函數和變換函數
6.6.1變換構造函數
6.6.2變換函數
6.7靜態數據成員和靜態成員函數
6.8this指針
6.9友元
6.9.1友元函數
6.9.2友元類
6.10運算符的重載
6.10.1operator函數的功能
6.10.2operator函數的重載
6.10.3類的友元是operator函數
6.10.4幾個典型的例子
6.11const對象
6.12類的嵌套定義
6.13類的數據成員是類對象或常量
6.13.1類的數據成員是類對象
6.13.2類的數據成員是常量
6.14對象數組
6.15指向類的成員的指針
6.15.1指向類的非靜態成員的指針
6.15.2指向類的靜態成員的指針
6.16結構
6.17聯合
6.18位段
習題
第7章繼承
7.1基類和派生類
7.2虛函數和多態
7.2.1靜態結合和動態結合
7.2.2虛函數
7.3純虛函數和抽象類
7.3.1純虛函數
7.3.2抽象類
7.4虛析構函數
7.5繼承的種類
7.5.1多重繼承
7.5.2直接繼承和間接繼承
7.6多重基類和虛擬基類
7.7繼承方式下的構造與析構
7.8C++語言特有的強制類型轉換運算符
7.8.1dynamic_cast運算符
7.8.2static_cast運算符
7.8.3const_cast運算符
7.8.4reinterpret_cast運算符
7.9explicit關鍵字
7.10typeid運算符
習題
第8章類的設計
8.1計數器類的設計
8.2字符串類的設計
8.3鏈表類的設計
8.4堆棧類的設計
8.5數組類的設計
8.6用于實現多態性的例子
習題
第9章模板和異常處理
9.1模板
9.1.1函數模板
9.1.2類模板
9.1.3STL簡介
9.2異常處理
9.2.1try關鍵字的使用
9.2.2throw關鍵字的使用
9.2.3catch關鍵字的使用
9.2.4異常處理對象
9.2.5異常處理中的構造與析構
習題
第10章編譯預處理
10.1宏定義
10.2文件包括
10.3條件編譯
10.4其他
習題