本書第一版被列入“面向21世紀課程教材”,自出版以來,深受讀者歡迎。作為給程序設計初學者提供的一本入門教材,它以循序漸進、深入淺出的方式,引導眾多學子走進了面向對象程序設計的大門;不少高校采用它作為大學生首門程序設計課程的教材。
在歸納多年教學體會的基礎上,我們以繼續(xù)保持原書的特色為前提,對本書進行了修改和補充,以便相關的概念闡述得更加通俗易懂;并適當地增加了相關的例子,以求使讀者在學習時能更好地理解和領會。例如,在第四章增加了常用編譯預處理命令的說明;在第四、五、六、七、八、九等章加入了針對性的應用實例等。
程序設計課程教學的宗旨是培養(yǎng)學生掌握程序設計的基本概念、基本思想和方法。我們采用c++語言作為學習面向對象程序設計的工具;但是,不能認為C++就是面向對象程序設計,C++語言僅僅是學習所用的工具而已,它并非學習的最終目標。所以,本書也不打算編成c++大全,涉及C++語言的眾多細節(jié)、C++語言各種具體版本的制約等內容都未列入本書討論的范疇。透過現象抓本質,這也正是我們重要的體會。
《面向對象程序設計基礎(第2版)》第一版被列入“面向21世紀課程教材”,自出版以來,深受讀者歡迎。作為給程序設計初學者提供的一本入門教材,《面向對象程序設計基礎》以循序漸進,深入淺出的方式,引導眾多學子走進了面向對象程序設計的大門。新版教材在歸納多年教學體會的基礎上,以繼續(xù)保持原書的特色為前提,對前版教材進行了修改和補充,使相關概念闡述得更加通俗易懂,并適當增加了相關的例子,以求使讀者在學習時能更好地理解和領會。新版教材內容包括了程序設計基礎、程序設計語言、算法與復雜性和軟件工程等內容,可作為高校計算機專業(yè)本科生入門教材,也可供相關專業(yè)高年級學生作為面向對象程序設計課程教材使用。
第一章 程序設計與C++語言初步
1.1 計算機程序
1.1.1 算法
1.1.2 實體
1.1.3 程序
1.1.4 程序設計
1.2 程序設計的演變
1.2.1 早期程序設計
1.2.2 結構化程序設計
1.2.3 面向對象程序設計
1.3 程序設計語言的定義
1.3.1 語法和語義
1.3.2 字符集
1.3.3 Backus-Naur范式
1.3.4 語法圖
1.4 C++語言的程序結構
1.4.1 C++語言程序的組成
1.4.2 C++語言程序的基本結構
1.4.3 C+4-語言程序的退化結構
1.5 C++語言程序的運行
1.6 面向對象程序設計
1.6.1 面向對象程序設計過程
1.6.2 面向對象程序設計的特征
本章小結
練習與思考題
上機實習題
第二章 基本數據類型
2.1 數據類型概述
2.1.1 類型
2.1.2 類型的作用
2.1.3 C++語言的類型
2.2 保留字、標識符、常量與變量
2.2.1 單詞
2.2.2 保留字
2.2.3 標識符
2.2.4 選擇合適的標識符
2.2.s常量與變量
2.2.6 簡單輸入/輸出
2.3 基本數據類型
2.3.1 字符類型
2.3.2 整數類型
2.3.3 浮點類型和雙精度類型
2.3.4 字符串常量
2.3.5 符號常量
2.4 運算符與表達式
2.4.1 表達式
2.4.2 表達式的運算次序
2.4.3 C++的運算符
2.4.4 算術運算
2.4.5 關系運算
2.4.6 邏輯運算
2.4.7 位運算
2.4.8 條件運算
2.4.9 sizeof運算
2.4.10 賦值運算
2.4.11 逗號運算
2.4.12 表達式與運算符的應用舉例
2.5 類型之問的關系
2.5.1 隱式類型轉換
2.5.2 強制類型轉換
2.6 一個簡單的應用程序
本章小結
練習與思考題
上機實習題
第三章 基本控制結構
3.1 程序的基本控制結構
3.1.1 C++語言的簡單語句
3.1.2 單入口/單出口控制結構
3.1.3 結構化程序設計工具
3.2 選擇結構
3.2.1 if語句
3.2.2 switch語句
3.3 循環(huán)結構
3.3.1 while語句
3.3.2 do-while語句
3.3.3 for語句
3.3.4 一個簡單的循環(huán)例子
3.3.5 設計正確的循環(huán)
3.4 簡單程序設計舉例
3.4.1 問題
3.4.2 求解問題的精美算法
3.4.3 求解問題的原始算法
本章小結
練習與思考題
上機實習題
第四章 函數
4.1 C++語言的函數
4.1.1 例程與函數
4.1.2 函數的建立與使用
4.1.3 兩個簡單的例子
4.2 函數的聲明與調用
4.2.1 函數聲明
4.2.2 return語句
4.2.3 函數調用
4.2.4 函數與模塊
4.2.5 內聯函數
4.3 參數傳遞
4.3.1 參數傳遞方式
4.3.2 按值調用
4.3.3 缺省參數
4.4 作用域與生存期
4.4.1 標識符的作用域
4.4.2 C++程序的存儲組織
4.4.3 變量的生存期
4.5 局部變量與全局變量
4.5.1 局部變量
4.5.2 全局變量
4.5.3 局部變量與全局變量的討論
4.6 變量的存儲類別
4.6.1 自動變量和寄存器變量
4.6.2 靜態(tài)變量
4.6.3 外部變量
4.7 遞歸程序設計
4.7.1 簡單遞歸程序
4.7.2 梵塔問題
4.8 預處理命令
4.8.1 文件包含
4.8.2 宏定義
4.8.3 條件編譯
4.9 C++語言的庫函數
4.9.1 庫函數的用法
4.9.2 常用數值函數
4.9.3 常用字符函數
本章小結
練習與思考題
上機實習題
第五章 類與對象
5.1 類的引人
5.1.1 循環(huán)計數器
5.1.2 關于循環(huán)計數器的討論
5.1.3 類作為構造程序的基本單位
5.2 類的定義
5.2.1 類聲明
5.2.2 類成員的訪問控制
5.2.3 類界面與類實現
5.2.4 標識符的類作用域
5.3 對象的創(chuàng)建
5.3.1 對象聲明
5.3.2 使用對象成員
5.3.3 對象的生存期
5.4 對象的初始化
5.4.1 構造函數
5.4.2 析構函數
5.4.3 對象成員的初始化
5.5 使用類與對象構造程序的實例
5.5.1 模擬數字式時鐘
5.5.2 模擬加油站油泵的對象工作
5.5.3 單實例對象類
5.6 關于類與對象的進一步討論
5.6.1 基本數據類型與對象
5.6.2 抽象數據類型
5.6.3 設計良好的類界面
5.6.4 再論對象
5.6.5 下一步
本章小結
練習與思考題
上機實習題
第六章 復合數據類型
6.1 變量與賦值的進一步討論
6.2 指針類型
6.2.1 指針的聲明
6.2.2 指針的引用
6.2.3 指針的運算
6.2.4 按引用調用的參數傳遞方式
6.3 數組類型
6.3.1 一維數組的聲明
6.3.2 一維數組元素的引用與初始化
6.3.3 數組作為函數的參數
6.3.4 一維數組應用舉例
6.3.5 二維數組的聲明
6.3.6 二維數組元素的引用與初始化
6.3.7 二維數組應用舉例
6.3.8 指針與數組
6.3.9 指針數組與數組指針
6.4 字符串
6.4.1 字符串常量與變量
6.4.2 字符串數組
6.4.3 關于字符串操作的庫函數
6.4.4 字符串與指針數組應用的例子(主函數帶參數)
6.5 指向對象的指針
6.5.1 對象指針
6.5.2 對象的動態(tài)創(chuàng)建與撤銷
6.5.3 對象的復制與比較
6.6 指向函數的指針
6.6.1 函數指針
6.6.2 函數指針作為參數
6.6.3 主動對象
6.7 結構類型、枚舉類型與類型別名
6.7.1 結構類型
6.7.2 枚舉類型
6.7.3 類型別名
6.8 高級數據結構應用
本章小結
練習與思考題
上機實習題
第七章 繼承機制
7.1 繼承的基本概念
7.2 C++語言的繼承機制
7.3 繼承與構造函數、析構函數
7.4 繼承成員的調整
7.5 多重繼承
7.6 重復繼承
7.7 優(yōu)化類層次設計
本章 小結
練習與思考題
上機實習題
第八章 多態(tài)性
8.1 多態(tài)性的基本概念
8.2 函數重載
8.3 拷貝構造函數
8.4 運算符重載
8.5 虛函數
8.6 抽象類
本章 小結
練習與思考題
上機實習題
第九章 類屬機制
9.1 類屬的基本概念
9.2 類模板
9.3 函數模板
本章 小結
練習與思考題
上機實習題
第十章 輸入/輸出流
10.1 C++語言輸入/輸出
10.2 C++的流類庫
10.3 格式化輸入/輸出
10.4 常用成員函數輸入/輸出
10.5 設計自己的輸入/輸出操作
10.6 檢測流操作的錯誤
10.7 文件流
本章 小結
練習與思考題
上機實習題
第十一章 面向對象軟件構造
11.1 軟件質量
11.2 程序斷言機制
11.3 異常處理機制
11.4 可重用構件庫
11.5 面向對象軟件構造
11.6 實例研究:Petri網圖形編輯器的討論
第十二章 結束語
12.1 程序設計風范
12.2 面向對象程序設計語言
本章 小結
練習與思考題
上機實習題
附錄 A ASCII編碼表
附錄 B 主要術語索引
附錄 C 主要參考文獻
由于二進制數據不便書寫與閱讀,所以常用八進制或十六進制取代二進制。在c++語言中,八進制數用“0”開始,十六進制數用“0x”開始,其他表示十進制數。對于一個給定的字節(jié)01001010,相應的八進制、十六進制與十進制表示分別是0112、04和74。這個字節(jié)表示的到底是什么數據呢?這可能有多種解釋。如果將它理解為無符號整數,則這個字節(jié)表示的是正整數+74;如果將它理解為一個AscII編碼的字符,這個字節(jié)表示的又是英文字母“J”。由此可見,要理解一個數據到底表達的是什么含義還必須依賴于這個數據應做何解釋,這種對數據的解釋稱為類型(type)。在程序設計中,類型有重要的意義:程序中所有的數據都屬于特定的類型,數據的表示方式、取值范圍以及對數據可以使用的操作都由數據所屬的類型決定。 類型可以幫助編譯程序生成高效率的目標代碼。為了讓編譯程序了解數據所屬的類型,通常程序設計語言都遵循“先聲明、后使用”的原則,即在使用一個數據之前必須先聲明它屬于哪種類型。這樣,編譯程序在生成目標代碼時,就能知道需要分配多大的存儲空間以及如何引用這個數據。類型對于編寫程序的程序員也有重要意義。由于程序中的每一個數據都明確地屬于一種類型,所以這些數據的取值范圍、可以操作的運算等信息就可通過數據所屬的類型顯式地反映出來,提高了程序的可讀性和可理解性。在程序中使用數據時,可以根據數據的特點(如是字符還是數值、有無小數等)與可能的取值范圍決定數據的類型。一個數據屬于某一特定類型后,在該數據上允許操作的運算也就確定了下來。例如,兩個整數可以進行加、減、乘、除、整除、取模等運算,而兩個字符串則可進行比較、連接、判斷子串等操作,但不可做四則運算。