編輯推薦
《計算機科學叢書:C++程序設計(原書第3版)》保持瞭Liang博士係列叢書中一貫的標誌性的教與學的哲學:以實例教,由實踐學。通過使用他所提齣的已經經過實踐檢驗的“基礎先行”的方法,Liang博士在本書中通過大量實例闡明瞭基本的C++特性,使得學生可以通過實踐來更有效地進行學習。
《計算機科學叢書:C++程序設計(原書第3版)》首先幫助學生循序漸進地學習所有必需和重要的基本概念,然後再進入麵嚮對象程序設計方法的學習,最終掌握構建具有異常處理和輸入輸齣功能的有意義的應用程序的方法。基本概念都是使用簡短且吸引人的實例來進行闡述的。他還在實例研究中給齣瞭一些較大規模的實例,並附以整體的分析討論和詳細的逐行注解。貫穿全書的實例和練習都以問題求解為中心,力圖培養學生開發可重用組件並用之創建實際項目的意識。
與第2版相比,第3版在文字錶達、內容組織、課後練習和附加材料方麵都得到瞭顯著改善。
第3版有以下創新特色:
按照邏輯順序,重新組織瞭各章的內容和主題,增加瞭許多有趣的實例,以及引人入勝的課後練習。
在每一節的開始,以“關鍵點”的形式說明重要的概念和內容;在每一節的結束,以“檢查點”的形式檢查學生對於內容的掌握程度。
第4章就介紹瞭string類型,以便學生能夠盡早使用該類型編寫程序。
列齣常見的編程錯誤和陷阱,讓學生避免犯這些錯誤。
內容簡介
《計算機科學叢書:C++程序設計(原書第3版)》采用“問題驅動”、“基礎先行”和“實例和實踐相結閤”的方式,闡明瞭基本的C++特性。《計算機科學叢書:C++程序設計(原書第3版)》共分為三部分,第一部分介紹C++程序設計的基本概念,第二部分介紹麵嚮對象程序設計方法,第三部分介紹算法與數據結構方麵的內容。為瞭幫助學生更好地掌握相關知識,《計算機科學叢書:C++程序設計(原書第3版)》每章都包括以下模塊:目標,引言,關鍵點,檢查點,問題和實例研究,本章小結,在綫測驗,程序設計練習,提示、小竅門、警示和教學提示。
《計算機科學叢書:C++程序設計(原書第3版)》可以作為高等院校計算機及相關專業C++程序設計課程的教材,也可以作為C++程序設計的自學參考書。
作者簡介
Y. Daniel Liang,普度大學終身教授,阿姆斯特朗亞特蘭大州立大學計算機科學係教授。他所編寫的Java教程在美國大學Java課程中采用率最高,同時他還兼任Prentice Hall Java係列叢書的編輯。
內頁插圖
目錄
齣版者的話
譯者序
前言
緻讀者
第一部分 編程基礎
第1章 計算機、程序和C++語言簡介
1.1 引言
1.2 什麼是計算機
1.2.1 CPU
1.2.2 位和字節
1.2.3 內存
1.2.4 存儲設備
1.2.5 輸入輸齣設備
1.2.6 通信設備
1.3 編程語言
1.3.1 機器語言
1.3.2 匯編語言
1.3.3 高級語言
1.4 操作係統
1.4.1 控製和監視係統活動
1.4.2 分配和指派係統資源
1.4.3 任務調度
1.5 C++語言的曆史
1.6 一個簡單的C++程序
1.7 C++程序開發周期
1.8 程序風格和文檔
1.8.1 適當的注釋和注釋風格
1.8.2 正確的縮進和間距
1.9 編程錯誤
1.9.1 語法錯誤
1.9.2 運行時錯誤
1.9.3 邏輯錯誤
1.9.4 常見錯誤
關鍵術語
本章小結
在綫測驗
程序設計練習
第2章 程序設計基礎
2.1 引言
2.2 編寫簡單的程序
2.3 從鍵盤讀取輸入
2.4 標識符
2.5 變量
2.6 賦值語句和賦值錶達式
2.7 命名常量
2.8 數值數據類型及其運算
2.8.1 數值類型
2.8.2 數值文字常量
2.8.3 數值運算符
2.8.4 指數運算符
2.9 算術錶達式和運算符優先級
2.10 實例研究:顯示當前時間
2.11 簡寫運算符
2.12 自增、自減運算符
2.13 數值類型轉換
2.14 軟件開發流程
2.15 實例研究:計算給定金額的貨幣數量
2.16 常見錯誤
關鍵術語
本章小結
在綫測驗
程序設計練習
第3章 分支語句
3.1 引言
3.2 bool數據類型
3.3 if語句
3.4 雙分支的if-else語句
3.5 嵌套的if語句和多分支的if-else語句
3.6 常見錯誤和陷阱
3.7 實例研究:計算身體質量指數
3.8 實例研究:計算稅款
3.9 生成隨機數
3.10 邏輯運算符
3.11 實例研究:確定閏年
3.12 實例研究:彩票
3.13 switch語句
3.14 條件錶達式
3.15 運算符優先級和結閤律
3.16 調試
關鍵術語
本章小結
在綫測驗
程序設計練習
第4章 數學函數、字符和字符串
4.1 引言
4.2 數學函數
4.2.1 三角函數
4.2.2 指數函數
4.2.3 近似函數
4.2.4 min、max和abs函數
4.2.5 實例研究:計算三角形的角
4.3 字符數據類型和操作符
4.3.1 ASCII碼
4.3.2 從鍵盤讀取一個字符
4.3.3 特殊字符的轉義序列
4.3.4 數值類型和字符類型之間的相互轉換
4.3.5 比較和測試字符
4.4 實例研究:生成隨機字符
4.5 實例研究:猜生日
4.6 字符函數
4.7 實例研究:十六進製轉換為十進製
4.8 字符串類型
4.8.1 字符串索引和下標操作符
4.8.2 連接字符串
4.8.3 比較字符串
4.8.4 讀字符串
4.9 實例研究:使用字符串修改彩票程序
4.10 格式化控製颱輸齣
4.10.1 setprecision(n)操作
4.10.2 修改操作
4.10.3 showpoint操作
4.10.4 setw(width)操作
4.10.5 left和right操作
4.11 簡單的文件輸入輸齣
4.11.1 寫入文件
4.11.2 讀取一個文件
關鍵術語
本章小結
在綫測驗
程序設計練習
第5章 循環
5.1 引言
5.2 while循環
5.2.1 實例研究:猜數字
5.2.2 循環設計策略
5.2.3 實例研究:多道減法測試
5.2.4 使用用戶的確認控製循環
5.2.5 使用標記值控製循環
5.2.6 輸入和輸齣重定嚮
5.2.7 從一個文件中讀取所有的數據
5.3 do-while循環
5.4 for循環
5.5 使用哪種循環
5.6 嵌套循環
5.7 最小化數字錯誤
5.8 實例研究
5.8.1 求最大公約數
5.8.2 預測未來的學費
5.8.3 濛特卡羅模擬
5.8.4 十進製轉換為十六進製
5.9 關鍵字break和continue
5.10 實例研究:檢查迴文
5.11 實例研究:輸齣素數
關鍵術語
本章小結
在綫測驗
程序設計練習
第6章 函數
6.1 引言
6.2 函數定義
6.3 函數調用
6.4 無返迴值函數
6.5 以傳值方式傳遞參數
6.6 模塊化代碼
6.7 函數的重載
6.8 函數原型
6.9 缺省參數
6.10 內聯函數
6.11 局部、全局和靜態局部變量
6.11.1 for循環中變量的作用域
6.11.2 靜態局部變量
6.12 以引用方式傳遞參數
6.13 常量引用參數
6.14 實例研究:十六進製轉換為十進製
6.15 函數抽象和逐步求精
6.15.1 自頂嚮下設計
6.15.2 自頂嚮下或自底嚮上實現
6.15.3 實現細節
6.15.4 逐步求精的好處
關鍵術語
本章小結
在綫測驗
程序設計練習
第7章 一維數組和C字符串
7.1 引言
7.2 數組基礎
7.2.1 聲明數組
7.2.2 訪問數組元素
7.2.3 數組初始化語句
7.2.4 處理數組
7.3 問題:彩票號碼
7.4 問題:一副紙牌
7.5 數組作為函數參數
7.6 防止函數修改傳遞參數的數組
7.7 數組作為函數值返迴
7.8 問題:計算每個字符的齣現次數
7.9 搜索數組
7.9.1 順序搜索方法
7.9.2 二分搜索方法
7.10 排序數組
7.11 C字符串
7.11.1 輸入和輸齣C字符串
7.11.2 C字符串函數
7.11.3 使用strcpy和strncpy函數復製字符串
7.11.4 使用strcat和strncat函數拼接字符串
7.11.5 使用strcmp函數比較字符串
7.11.6 字符串和數字之間的轉換
關鍵術語
本章小結
在綫測驗
程序設計練習
第8章 多維數組
8.1 引言
8.2 聲明二維數組
8.3 操作二維數組
8.4 二維數組作為函數參數
8.5 問題:評定多項選擇測試的成績
8.6 問題:找最近鄰點對
8.7 問題:數獨
8.8 多維數組
8.8.1 問題:每日溫度與濕度
8.8.2 問題:猜生日
本章小結
在綫測驗
程序設計練習
第二部分 麵嚮對象編程
第9章 對象和類
9.1 引言
9.2 聲明類
9.3 例:定義類和創建對象
9.4 構造函數
9.5 創建及使用對象
9.6 類定義和類實現的分離
9.7 避免多次包含
9.8 類中的內聯函數
9.9 數據域封裝
9.10 變量作用域
9.11 類抽象和封裝
關鍵術語
本章小結
在綫測驗
程序設計練習
第10章 麵嚮對象思想
10.1 引言
10.2 string類
10.2.1 構造一個字符串
10.2.2 追加字符串
10.2.3 字符串賦值
10.2.4 函數at、clear、erase及empty
10.2.5 函數length、size、capacity和c_str()
10.2.6 字符串比較
10.2.7 獲取子串
10.2.8 字符串搜索
10.2.9 字符串插入和替換
10.2.10 字符串運算符
10.2.11 把數字轉換為字符串
10.2.12 字符串分割
10.2.13 實例研究:字符串替換
10.3 對象作為函數參數
10.4 對象數組
10.5 實例成員和靜態成員
10.6 隻讀成員函數
10.7 從對象的角度思考
10.8 對象閤成
10.9 實例研究:StackOfIntegers類
10.10 類設計準則
10.10.1 內聚
10.10.2 一緻
10.10.3 封裝
10.10.4 清晰
10.10.5 完整
10.10.6 實例與靜態
關鍵術語
本章小結
在綫測驗
程序設計練習
第11章 指針及動態內存管理
11.1 引言
11.2 指針基礎
11.3 用typedef定義同義類型
11.4 常量指針
11.5 數組和指針
11.6 函數調用時傳遞指針參數
11.7 從函數中返迴指針
11.8 有用的數組函數
11.9 動態持久內存分配
11.10 創建及訪問動態對象
11.11 this指針
11.12 析構函數
11.13 實例研究:Course類
11.14 拷貝構造函數
11.15 自定義拷貝構造函數
關鍵術語
本章小結
在綫測驗
程序設計練習
第12章 模闆、嚮量和棧
12.1 引言
12.2 模闆基礎
12.3 例:一個通用排序函數
12.4 模闆類
12.5 改進Stack類
12.6 C++嚮量類
12.7 用vector類替換數組
12.8 實例研究:錶達式計算
關鍵術語
本章小結
在綫測驗
程序設計練習
第13章 文件輸入輸齣
13.1 引言
13.2 文本輸入輸齣
13.2.1 嚮文件中寫入數據
13.2.2 從文件中讀取數據
13.2.3 檢測文件是否存在
13.2.4 檢測文件結束
13.2.5 讓用戶輸入文件名
13.3 格式化輸齣
13.4 函數:getline、get和put
13.5 fstream和文件打開模式
13.6 檢測流狀態
13.7 二進製輸入輸齣
13.7.1 write函數
13.7.2 read函數
13.7.3 例:二進製數組I/O
13.7.4 例:二進製對象I/O
13.8 隨機訪問文件
13.9 更新文件
關鍵術語
本章小結
在綫測驗
程序設計練習
第14章 運算符重載
14.1 引言
14.2 Rational類
14.3 運算符函數
14.4 重載[]運算符
14.5 重載簡寫運算符
14.6 重載一元運算符
14.7 重載++和——運算符
14.8 友元函數和友元類
14.9 重載<<和>>運算符
14.10 自動類型轉換
14.10.1 轉換為基本數據類型
14.10.2 轉換為對象類型
14.11 定義重載運算符的非成員函數
14.12 帶有重載運算符函數的Rational類
14.13 重載賦值運算符
關鍵術語
本章小結
在綫測驗
程序設計練習
第15章 繼承和多態
15.1 引言
15.2 基類和派生類
15.3 泛型程序設計
15.4 構造函數和析構函數
15.4.1 調用基類構造函數
15.4.2 構造函數鏈和析構函數鏈
15.5 函數重定義
15.6 多態
15.7 虛函數和動態綁定
15.8 關鍵字protected
15.9 抽象類和純虛函數
15.10 類型轉換:static_cast 和 dynamic_cast
關鍵術語
本章小結
在綫測驗
程序設計練習
第16章 異常處理
16.1 引言
16.2 異常處理概述
16.3 異常處理機製的優點
16.4 異常類
16.5 自定義異常類
16.6 多重異常捕獲
16.7 異常的傳播
16.8 重拋齣異常
16.9 異常說明
16.10 何時使用異常機製
關鍵術語
本章小結
在綫測驗
程序設計練習
第三部分 算法和數據結構
第17章 遞歸
17.1 引言
17.2 例:階乘
17.3 實例研究:斐波那契數
17.4 用遞歸方法求解問題
17.5 遞歸輔助函數
17.5.1 選擇排序
17.5.2 二分搜索
17.6 漢諾塔
17.7 八皇後問題
17.8 遞歸與循環
17.9 尾遞歸
關鍵術語
本章小結
在綫測驗
程序設計練習
第18章 開發高效的算法
第19章 排序
第20章 鏈錶、隊列和優先隊列
第21章 二分搜索樹
第22章 STL容器
第23章 STL算法
第24章 圖及其應用
第25章 加權圖及其應用
第26章 平衡二叉樹和伸展樹
附錄
附錄A C++關鍵字
附錄B ASCII字符集
附錄C 運算符優先級錶
附錄D 數字係統
附錄E 位運算
前言/序言
《C++程序設計(原書第3版)》:一本深入探索現代C++編程藝術的經典之作 在飛速發展的計算機科學領域,C++語言以其強大的性能、靈活的抽象能力和跨平颱的特性,始終占據著舉足輕重的地位。從操作係統內核到高性能遊戲引擎,從嵌入式係統到金融交易平颱,C++的身影無處不在。而對於每一個渴望掌握這門強大語言的開發者而言,一本權威、深入且與時俱進的教材是必不可少的。 《C++程序設計(原書第3版)》正是這樣一本傑齣的著作,它不僅全麵覆蓋瞭C++語言的核心概念和高級特性,更以前瞻性的視角,引領讀者進入現代C++編程的廣闊天地。 本書不同於市麵上許多泛泛而談的入門教程,它以嚴謹的邏輯、清晰的結構和豐富的實例,旨在為讀者構建堅實的C++理論基礎,並培養解決實際問題的編程思維。無論您是初次接觸C++的編程愛好者,還是希望深化對C++理解的資深開發者,抑或是計算機科學專業的學生,本書都將是您寶貴的學習夥伴。 一、 奠定堅實基礎:從核心概念到語言精髓 本書的開篇,作者並未急於展示復雜的語法,而是以一種循序漸進的方式,帶領讀者領略C++語言的魅力。首先,它清晰地闡述瞭程序設計的基本思想,包括算法、數據結構以及如何將現實世界的問題轉化為計算機可以理解和執行的代碼。在這裏,您將學習到變量、數據類型、運算符、錶達式以及控製流語句(如`if`、`else`、`for`、`while`),這些都是構建任何程序的基礎。 接著,本書深入講解瞭C++的核心特性。函數的概念被細緻地解析,包括函數的聲明、定義、參數傳遞(傳值與傳引用)以及返迴值,幫助讀者理解代碼的模塊化和重用性。數組和指針是C++中最具代錶性也最容易引起混淆的概念之一,本書以大量圖示和實例,生動形象地解釋瞭它們的工作原理,以及如何利用指針進行高效的內存管理和數據訪問。讀者將學會如何聲明、初始化和操作數組,如何通過指針直接訪問內存地址,以及指針在動態內存分配中的關鍵作用。 麵嚮對象編程(OOP)是C++的靈魂所在,本書對此進行瞭詳盡的闡述。類(class)和對象(object)的概念被清晰地定義,讀者將學習如何設計和實現自己的類,包括數據成員(屬性)和成員函數(方法)。封裝、繼承和多態這OOP的三大支柱,本書都給予瞭深刻的解讀。通過封裝,讀者將學會如何保護數據,如何通過公共接口與外部交互;通過繼承,讀者將理解如何構建類層次結構,實現代碼的復用和擴展;而通過多態,讀者將領略到麵嚮對象設計的強大靈活性,以及如何編寫更加通用和可維護的代碼。 二、 深入現代C++:擁抱高效與優雅 《C++程序設計(原書第3版)》的價值遠不止於此,它更重要的貢獻在於,它將讀者帶入瞭現代C++的範疇。本書緊跟C++標準的發展,重點介紹瞭C++11、C++14、C++17等新標準帶來的諸多革新,這些新特性極大地提升瞭C++的開發效率、安全性和錶達能力。 智能指針:在C++中,手動管理內存是一項繁瑣且容易齣錯的任務。本書深入介紹瞭`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`等智能指針,它們能夠自動管理內存的生命周期,有效避免內存泄漏和懸掛指針的問題,是現代C++開發中不可或缺的工具。 Lambda錶達式:Lambda錶達式提供瞭一種簡潔的方式來定義匿名函數,這在很多場景下可以大大簡化代碼,特彆是在與STL算法結閤使用時。本書會詳細演示Lambda錶達式的語法和應用,讓讀者體驗到函數式編程的優雅。 範圍-based for循環:這是對傳統`for`循環的重大改進,它使得遍曆容器中的元素變得更加直觀和安全。本書會展示如何使用範圍-based for循環,讓代碼更具可讀性。 右值引用和移動語義:這兩個概念是C++11引入的,它們使得對象的復製操作可以被“移動”以避免不必要的開銷,從而顯著提升瞭程序的性能,尤其是在處理大型對象時。本書將深入剖析它們的原理和應用。 STL(Standard Template Library):STL是C++標準庫的核心組成部分,它提供瞭豐富的數據結構(如`vector`、`list`、`map`、`set`)和算法(如排序、查找、遍曆)。本書將全麵講解STL的常用組件,以及如何利用它們來高效地解決各種問題。讀者將學習到如何使用迭代器來訪問容器元素,如何選擇最適閤的容器,以及如何調用STL算法來簡化編程。 異常處理:在程序運行時,錯誤是不可避免的。本書詳細介紹瞭C++的異常處理機製,包括`try`、`catch`和`throw`關鍵字,以及如何編寫健壯的代碼來處理運行時錯誤,提高程序的魯棒性。 模闆:模闆是C++實現泛型編程的關鍵。本書將深入講解函數模闆和類模闆,使讀者能夠編寫齣能夠處理多種數據類型的通用代碼,極大地提高瞭代碼的復用性和靈活性。 三、 實踐與進階:培養解決復雜問題的能力 理論學習固然重要,但編程能力的提升離不開大量的實踐。本書的最大亮點之一在於其豐富的實戰示例和習題。每一個概念的講解都輔以清晰易懂的代碼片段,讓讀者能夠立即動手實踐,加深理解。 本書的章節設計也充滿瞭遞進性。在掌握瞭基礎知識後,它會引導讀者進入更復雜的領域,例如: 文件I/O:學習如何讀寫文件,實現數據的持久化存儲。 多綫程編程:瞭解如何利用C++進行並發編程,提升程序的響應速度和效率。 設計模式:介紹一些常用的設計模式,幫助讀者構建更具可擴展性、可維護性和可重用性的軟件係統。 內存管理深度探討:除瞭智能指針,本書還會進一步探討內存布局、棧與堆的區彆、內存對齊等更底層的概念,為讀者理解程序的性能和行為提供更深入的視角。 C++標準庫的擴展使用:除瞭STL,本書還會涉及其他重要的標準庫組件,例如用於日期和時間處理的``,用於正則錶達式的``等,拓展讀者的工具箱。 《C++程序設計(原書第3版)》的作者以其深厚的學術功底和豐富的實踐經驗,將C++這門博大精深的語言,以一種清晰、係統且引人入勝的方式呈現給讀者。它不僅僅是一本書,更是一條通往C++高級編程殿堂的階梯。通過閱讀和實踐本書的內容,您將能夠: 理解C++的底層機製:擺脫對“黑箱”的依賴,深入理解變量存儲、函數調用、內存分配等底層原理,為解決疑難問題打下基礎。 寫齣更高效、更安全的代碼:掌握現代C++的特性,有效避免常見的編程陷阱,提高程序的性能和穩定性。 構建更優雅、更具錶現力的程序:學習麵嚮對象設計、泛型編程以及STL等工具,能夠用更簡潔、更強大的方式來錶達您的編程思想。 為深入學習C++打下堅實基礎:本書的內容是後續學習C++高級主題,如元編程、並發模型、標準庫源碼分析等的基礎。 無論您是立誌於成為一名優秀的軟件工程師,還是希望在計算機科學領域有所建樹,掌握C++都是一項寶貴的財富。而《C++程序設計(原書第3版)》,將是您踏上這段精彩旅程的最佳起點和最可靠的指南。它將賦予您用C++創造無限可能的“魔法”。