《高等院校計算機教材系列·C++程序設計:思想與方法(第2版)》以C++為語言環境,全面介紹結構化程序設計和面向對象程序設計。書中注重實踐性,強調解決問題的方法,讓讀者不但學會知識而且還會靈活運用知識。為此,作者采用以問題求解引出知識點的方法,在介紹C++語言要素的同時,重點講授程序設計的思想和方法,目標是讓學生先了解學習的目的,提高學習的興趣,最后能利用學到的知識解決某些應用領域的問題。
本書內容豐富,覆蓋面廣,而且在內容的安排上采用了模塊化的結構,教學時可以根據實際情況靈活選取和合理安排,不影響整個知識的連貫性。第2版增加了更多的習題和實例,更加注重問題求解過程的分析,很多章還增加了“編程規范與常見錯誤”一節,指導學生養成良好的編程習慣。
翁惠玉,上海人,上海交通大學博士,現為上海交通大學計算機系副教授,主要從事計算機網絡、數據庫和信息系統的研究,并長期擔任ACM班計算機科學導論、程序設計和數據結構課程的主講教師,其中程序設計課程于2004年被評為上海市精品課程。翁老師科研成果頗豐,多次獲得上海市科技進步獎,并多次獲得上海交通大學的優秀教學獎,編寫了多本教材,如《數據結構:思想與實現》和《數據結構:題解與拓展》等,還翻譯了多本國外的教材。
第1章 緒論
1.1 計算機硬件
1.2 計算機軟件
1.3 程序設計
1.3.1 算法設計
1.3.2 編碼
1.3.3 程序的編譯和調試
小結
習題
第2章 通過例子學習
2.1 第一個程序:輸出Hello world
2.1.1 注釋
2.1.2 預編譯
2.1.3 主程序
2.1.4 名字空間
2.2 第二個程序:計算圓的面積和周長
2.3 數據類型
2.3.1 整型
2.3.2 實型
2.3.3 字符型
2.3.4 布爾型
2.3.5 枚舉類型
2.3.6 用typedef 重新命名類型名
2.3.7 變量賦初值
2.3.8 用sizeof 了解占用的內存量
2.4 符號常量
2.5 算術運算
2.5.1 主要的算術運算符
2.5.2 各種類型的數值間的混合運算
2.5.3 整數除法和取模運算符
2.5.4 優先級與結合性
2.5.5 數學函數庫
2.6 賦值運算
2.6.1 賦值運算符
2.6.2 賦值時的自動類型轉換
2.6.3 賦值的嵌套
2.6.4 多重賦值
2.6.5 復合賦值運算
2.7 自增和自減運算符
2.8 強制類型轉換
2.9 數據的輸入/輸出
2.9.1 數據的輸入
2.9.2 數據的輸出
2.1 0 編程規范及常見錯誤
小結
習題
第3章 邏輯思維--分支程序設計
3.1 關系運算
3.1.1 關系運算符
3.1.2 關系表達式
3.2 邏輯運算
3.3 if 語句
3.3.1 if 語句的形式
3.3.2 if 語句的嵌套
3.3.3 if 語句的應用
3.3.4 條件表達式
3.4 switch 語句及其應用
3.5 編程規范及常見錯誤
小結
習題
第4章 重復控制--循環程序設計
4.1 for 循環
4.1.1 重復n 次操作
4.1.2 for 語句的進一步討論
4.1.3 for 循環的嵌套
4.2 while 循環
4.3 do-while 循環
4.4 循環的中途退出
4.5 枚舉法
4.6 貪婪法
4.7 編程規范和常見錯誤
小結
習題
第5章 批量數據處理--數組
5.1 一維數組
5.1.1 一維數組的定義
5.1.2 數組元素的引用
5.1.3 一維數組的初始化
5.1.4 一維數組在內存中的表示
5.1.5 一維數組的應用
5.2 查找和排序
5.2.1 查找
5.2.2 排序
5.3 二維數組
5.3.1 二維數組的定義
5.3.2 二維數組的初始化
5.3.3 二維數組在內存中的表示
5.3.4 二維數組的應用
5.4 字符串
5.4.1 字符串的存儲及初始化
5.4.2 字符串的輸入/輸出
5.4.3 字符串處理函數
5.4.4 字符串的應用
5.5 編程規范及常見錯誤
小結
習題
第6章 過程封裝--函數
6.1 函數的定義
6.1.1 return 語句
6.1.2 函數示例
6.2 函數的使用
6.2.1 函數原型的聲明
6.2.2 函數的調用
6.2.3 將函數與主程序放在一起
6.2.4 函數調用過程
6.3 數組作為函數的參數
6.4 帶默認值的函數
6.5 內聯函數
6.6 重載函數
6.7 函數模板
6.8 變量的作用域
6.9 變量的存儲類別
6.9.1 自動變量
6.9.2 靜態變量
6.9.3 寄存器變量
6.9.4 外部變量
6.1 0 遞歸函數
6.1 0.1 遞歸函數的基本概念
6.1 0.2 遞歸函數的應用
6.1 1 基于遞歸的算法
6.1 1.1 回溯法
6.1 1.2 分治法
6.1 1.3 動態規劃
6.1 2 編程規范及常見錯誤
小結
習題
第7章 間接訪問--指針
7.1 指針的概念
7.1.1 指針變量的定義
7.1.2 指針的基本操作
7.2 指針運算與數組
7.2.1 指針運算
7.2.2 用指針訪問數組
7.3 指針與動態內存分配
7.3.1 動態變量的創建
7.3.2 動態變量的回收
7.3.3 內存泄漏
7.3.4 查找new 操作的失誤
7.4 字符串再討論
7.5 指針與函數
7.5.1 指針作為形式參數
7.5.2 數組名作為形式參數的再討論
7.5.3 字符串作為函數的參數
7.5.4 返回指針的函數
7.5.5 引用與引用傳遞
7.5.6 返回引用的函數
7.6 指針數組與多級指針
7.6.1 指針數組
7.6.2 main 函數的參數
7.6.3 多級指針
7.7 多維數組和指向數組的指針
7.8 指向函數的指針
7.8.1 作為函數的參數
7.8.2 用于菜單選擇
7.9 編程規范與常見錯誤
小結
習題
第8章 數據封裝--結構體
8.1 記錄的概念
8.2 C++語言中記錄的使用
8.2.1 結構體類型的定義
8.2.2 結構體類型的變量的定義
8.2.3 結構體類型的變量的使用
8.2.4 結構體數組
8.3 結構體作為函數的參數
8.4 鏈表
8.4.1 鏈表的概念
8.4.2 單鏈表的存儲
8.4.3 單鏈表的操作
8.5 編程規范及常見錯誤
小結
習題
第9章 模塊化開發
9.1 自頂向下分解
9.1.1 頂層分解
9.1.2 prn_instruction 函數的實現
9.1.3 play 函數的實現
9.1.4 get_call_from_user 函數的實現
9.2 模塊劃分
9.3 設計自己的庫
9.4 編程規范及常見錯誤
小結
習題
第10章 創建工具--類的定義與使用
10.1 從過程化到面向對象
10.1.1 抽象的過程
10.1.2 面向對象程序設計的特點
10.1.3 庫和類
10.2 類的定義
10.3 對象的使用
10.3.1 對象的定義
10.3.2 對象的操作
10.3.3 this 指針
10.3.4 對象的構造與析構
10.4 常量對象與常量成員函數
10.5 常量數據成員
10.6 靜態數據成員與靜態成員函數
10.6.1 靜態數據成員的定義
10.6.2 靜態成員函數
10.6.3 靜態常量成員
10.7 友元
10.8 編程規范及常見錯誤
小結
習題
第11章 運算符重載
11.1 什么是運算符重載
11.2 運算符重載的方法
11.3 幾個特殊運算符的重載
11.3.1 賦值運算符的重載
11.3.2 下標運算符的重載
11.3.3 函數調用運算符重載
11.3.4 ++和--運算符的重載
11.3.5 輸入/輸出運算符的重載
11.3.6 重載函數的原型設計考慮
11.4 自定義類型轉換函數
11.4.1 內置類型到類類型的轉換
11.4.2 類類型到其他類型的轉換
11.5 運算符重載的應用
11.5.1 完整的Rational 類的定義和使用
11.5.2 完整的DoubleArray類的定義和使用
11.6 編程規范與常見錯誤
小結
習題
第12章 組合與繼承
12.1 組合
12.2 繼承
12.2.1 單繼承
12.2.2 基類成員在派生類中的訪問特性
12.2.3 派生類對象的構造、析構與賦值操作
12.2.4 重定義基類的函數
12.2.5 派生類作為基類
12.2.6 將派生類對象隱式轉換為基類對象
12.3 多態性與虛函數
12.3.1 多態性
12.3.2 虛函數
12.3.3 虛析構函數
12.4 純虛函數和抽象類
12.4.1 純虛函數
12.4.2 抽象類
12.5 多繼承
12.5.1 多繼承的格式
12.5.2 名字沖突
12.5.3 虛基類
12.6 面向對象設計范例
12.7 編程規范和常見錯誤
小結
習題
第13章 泛型機制--模板
13.1 類模板的定義
13.2 類模板的實例化
13.3 模板的編譯
13.4 非類型參數和參數的默認值
13.5 類模板的友元
13.5.1 普通友元
13.5.2 模板的特定實例的友元
13.6 類模板作為基類
13.7 編程規范及常見錯誤
小結
習題
第14章 輸入/輸出與文件
14.1 流與標準庫
14.2 輸入/輸出緩沖
14.3 基于控制臺的輸入/輸出
14.3.1 輸出流
14.3.2 輸入流
14.3.3 格式化的輸入/輸出
14.4 基于文件的輸入/輸出
14.4.1 文件的概念
14.4.2 文件和流
14.4.3 文件的順序訪問
14.4.4 文件的隨機處理
14.4.5 用流式文件處理含有記錄的文件
14.5 基于字符串的輸入/輸出
14.6 編程規范及常見錯誤
小結
習題
第15章 異常處理
15.1 傳統的異常處理方法
15.2 異常處理機制
15.2.1 異常拋出
15.2.2 異常捕獲
15.3 異常規格說明
15.4 編程規范和常見錯誤
小結
習題
第16章 容器和迭代器
16.1 容器
16.2 迭代器
16.3 容器和迭代器的設計示例
16.3.1 用數組實現的容器
16.3.2 用鏈表實現的容器
小結
習題
附錄 ASCII 表
參考文獻