內容簡介

C++誕生20年後,因其強大的功能、廣泛的適用性和極高的效率,已經成為毋庸置疑的主流編程語言。但是C++語言也不得不面對這樣的挑戰︰其博大精深不僅令初學者望而生畏,而且即使是許多富于經驗的老手也很難全面掌握,更有不少C++程序員一直背負著C語言的歷史包袱,常常落入各種微妙難解的安全和性能陷阱。如何使現代C++理念深入人心,使C++更加容易學習和使用,已經成為眾所矚目的關鍵問題。

C++ Primer是久負盛名、無可替代的C++經典著作,已經幫助全球無數程序員學會了C++。第4版完美結合了C++大師Stan B. Lippman豐富的實踐經驗和C++標準委員會原負責人Jos e Lajoie對C++標準的深入理解,更加入了C++先驅Barbara E. Moo在C++教學方面的真知灼見,充分體現了C++語言的最新進展和當前的業界最佳實踐。

對C++基本概念和技術全面而且權威的闡述,以及對現代C++編程風格的強調,使本書不僅是初學者的最佳C++指南,而且是中高級程序員不可或缺的參考書。
 

目錄

第1章 快速入門
1.1 編寫簡單的C++程序
1.2 初窺輸入/輸出
1.2.1 標準輸入與輸出對象
1.2.2 一個使用IO庫的程序
1.3 關于注釋
1.4 控制結構
1.4.1 while語句
1.4.2 for語句
1.4.3 if語句
1.4.4 讀入未知數目的輸入
1.5 類的簡介
1.5.1 Sales_item類
1.5.2 初窺成員函數
1.6 C++程序
小結
術語
第一部分 基本語言
第2章 變量和基本類型
2.1 基本內置類型
2.1.1 整型
2.1.2 浮點型
2.2 字面值常量
2.3 變量
2.3.1 什麼是變量
2.3.2 變量名
2.3.3 定義對象
2.3.4 變量初始化規則
2.3.5 聲明和定義
2.3.6 名字的作用域
2.3.7 在變量使用處定義變量
2.4 const限定符
2.5 引用
2.6 typedef名字
2.7 枚舉
2.8 類類型
2.9 編寫自己的頭文件
2.9.1 設計自己的頭文件
2.9.2 預處理器的簡單介紹
小結
術語
第3章 標準庫類型
3.1 命名空間的using聲明
3.2 標準庫string類型
3.2.1 string對象的定義和初始化
3.2.2 String對象的讀寫
3.2.3 string對象的操作
3.2.4 string對象中字符的處理
3.3 標準庫vector類型
3.3.1 vector對象的定義和初始化
3.3.2 vector對象的操作
3.4 迭代器簡介
3.5 標準庫bitset類型
3.5.1 bitset對象的定義和初始化
3.5.2 bitset對象上的操作
小結
術語
第4章 數組和指針
4.1 數組
4.1.1 數組的定義和初始化
4.1.2 數組操作
4.2 指針的引入
4.2.1 什麼是指針
4.2.2 指針的定義和初始化
4.2.3 指針操作
4.2.4 使用指針訪問數組元素
4.2.5 指針和const限定符
4.3 C風格字符串
4.3.1 創建動態數組
4.3.2 新舊代碼的兼容
4.4 多維數組
小結
術語
第5章 表達式
5.1 算術操作符
5.2 關系操作符和邏輯操作符
5.3 位操作符
5.3.1 bitset對象或整型值的使用
5.3.2 將移位操作符用于IO
5.4 賦值操作符
5.4.1 賦值操作的右結合性
5.4.2 賦值操作具有低優先級
5.4.3 復合賦值操作符
5.5 自增和自減操作符
5.6 箭頭操作符
5.7 條件操作符
5.8 sizeof操作符
5.9 逗號操作符
5.10 復合表達式的求值
5.10.1 優先級
5.10.2 結合性
5.10.3 求值順序
5.11 new和delete表達式
5.12 類型轉換
5.12.1 何時發生隱式類型轉換
5.12.2 算術轉換
5.12.3 其他隱式轉換
5.12.4 顯式轉換
5.12.5 何時需要強制類型轉換
5.12.6 命名的強制類型轉換
5.12.7 舊式強制類型轉換
小結
術語
第6章 語句
6.1 簡單語句
6.2 聲明語句
6.3 復合語句(塊)
6.4 語句作用域
6.5 if語句
6.6 switch語句
6.6.1 使用switch
6.6.2 switch中的控制流
6.6.3 default標號
6.6.4 switch表達式與case標號
6.6.5 switch內部的變量定義
6.7 while語句
6.8 for循環語句
6.8.1 省略for語句頭的某些部分
6.8.2 for語句頭中的多個定義
6.9 do while語句
6.10 break語句
6.11 continue語句
6.12 goto語句
6.13 try塊和異常處理
6.13.1 throw表達式
6.13.2 try塊
6.13.3 標準異常
6.14 使用預處理器進行調試
小結
術語
第7章 函數
7.1 函數的定義
7.1.1 函數返回類型
7.1.2 函數形參表
7.2 參數傳遞
7.2.1 非引用形參
7.2.2 引用形參
7.2.3 vector和其他容器類型的形參
7.2.4 數組形參
7.2.5 傳遞給函數的數組的處理
7.2.6 main︰處理命令行選項
7.2.7 含有可變形參的函數
7.3 return語句
7.3.1 沒有返回值的函數
7.3.2 具有返回值的函數
7.3.3 遞歸
7.4 函數聲明
7.5 局部對象
7.5.1 自動對象
7.5.2 靜態局部對象
7.6 內聯函數
7.7 類的成員函數
7.7.1 定義成員函數的函數體
7.7.2 在類外定義成員函數
7.7.3 編寫Sales_item類的構造函數
7.7.4 類代碼文件的組織
7.8 重載函數
7.8.1 重載與作用域
7.8.2 函數匹配與實參轉換
7.8.3 重載確定的三個步驟
7.8.4 實參類型轉換
7.9 指向函數的指針
小結
術語
第8章 標準IO庫
8.1 面向對象的標準庫
8.2 條件狀態
8.3 輸出緩沖區的管理
8.4 文件的輸入和輸出
8.4.1 文件流對象的使用
8.4.2 文件模式
8.4.3 一個打開並檢查輸入文件的程序
8.5 字符串流
小結
術語
第二部分 容器和算法
第9章 順序容器
9.1 順序容器的定義
9.1.1 容器元素的初始化
9.1.2 容器內元素的類型約束
9.2 迭代器和迭代器範圍
9.2.1 迭代器範圍
9.2.2 使迭代器失效的容器操作
9.3 順序容器的操作
9.3.1 容器定義的類型別名
9.3.2 begin和end成員
9.3.3 在順序容器中添加元素
9.3.4 關系操作符
9.3.5 容器大小的操作
9.3.6 訪問元素
9.3.7 刪除元素
9.3.8 賦值與swap
9.4 vector容器的自增長
9.5 容器的選用
9.6 再談string類型
9.6.1 構造string對象的其他方法
9.6.2 修改string對象的其他方法
9.6.3 只適用于string類型的操作
9.6.4 string類型的查找操作
9.6.5 string對象的比較
9.7 容器適配器
9.7.1 棧適配器
9.7.2 隊列和優先級隊列
小結
術語
第10章 關聯容器
10.1 引言︰pair類型
10.2 關聯容器
10.3 map類型
10.3.1 map對象的定義
10.3.2 map定義的類型
10.3.3 給map添加元素
10.3.4 使用下標訪問map對象
10.3.5 map::insert的使用
10.3.6 查找並讀取map中的元素
10.3.7 從map對象中刪除元素
10.3.8 map對象的迭代遍歷
10.3.9 “單詞轉換”map對象
10.4 set類型
10.4.1 set容器的定義和使用
10.4.2 創建“單詞排除”集
10.5 multimap和multiset類型
10.5.1 元素的添加和刪除
10.5.2 在multimap和multiset中查找元素
10.6 容器的綜合應用︰文本查詢程序
10.6.1 查詢程序的設計
10.6.2 TextQuery類
10.6.3 TextQuery類的使用
10.6.4 編寫成員函數
小結
術語
第11章 泛型算法
11.1 概述
11.2 初窺算法
11.2.1 只讀算法
11.2.2 寫容器元素的算法
11.2.3 對容器元素重新排序的算法
11.3 再談迭代器
11.3.1 插入迭代器
11.3.2 iostream迭代器
11.3.3 反向迭代器
11.3.4 const迭代器
11.3.5 五種迭代器
11.4 泛型算法的結構
11.4.1 算法的形參模式
11.4.2 算法的命名規範
11.5 容器特有的算法
小結
術語
第三部分 類和數據抽象
第12章 類
12.1 類的定義和聲明
12.1.1 類定義︰扼要重述
12.1.2 數據抽象和封裝
12.1.3 關于類定義的更多內容
12.1.4 類聲明與類定義
12.1.5 類對象
12.2 隱含的this指針
12.3 類作用域
12.4 構造函數
12.4.1 構造函數初始化式
12.4.2 默認實參與構造函數
12.4.3 默認構造函數
12.4.4 隱式類類型轉換
12.4.5 類成員的顯式初始化
12.5 友元
12.6 static類成員
12.6.1 static成員函數
12.6.2 static數據成員
小結
術語
第13章 復制控制
13.1 復制構造函數
13.1.1 合成的復制構造函數
13.1.2 定義自己的復制構造函數
13.1.3 禁止復制
13.2 賦值操作符
13.3 析構函數
13.4 消息處理示例
13.5 管理指針成員
13.5.1 定義智能指針類
13.5.2 定義值型類
小結
術語
第14章 重載操作符與轉換
14.1 重載操作符的定義
14.2 輸入和輸出操作符
14.2.1 輸出操作符 14.2.2 輸入操作符>>的重載
14.3 算術操作符和關系操作符
14.3.1 相等操作符
14.3.2 關系操作符
14.4 賦值操作符
14.5 下標操作符
14.6 成員訪問操作符
14.7 自增操作符和自減操作符
14.8 調用操作符和函數對象
14.8.1 將函數對象用于標準庫算法
14.8.2 標準庫定義的函數對象
14.8.3 函數對象的函數適配器
14.9 轉換與類類型
14.9.1 轉換為什麼有用
14.9.2 轉換操作符
14.9.3 實參匹配和轉換
14.9.4 重載確定和類的實參
14.9.5 重載、轉換和操作符
小結
術語
第四部分 面向對象編程與泛型編程
第15章 面向對象編程
15.1 面向對象編程︰概述
15.2 定義基類和派生類
15.2.1 定義基類
15.2.2 protected成員
15.2.3 派生類
15.2.4 virtual與其他成員函數
15.2.5 公用、私有和受保護的繼承
15.2.6 友元關系與繼承
15.2.7 繼承與靜態成員
15.3 轉換與繼承
15.3.1 派生類到基類的轉換
15.3.2 基類到派生類的轉換
15.4 構造函數和復制控制
15.4.1 基類構造函數和復制控制
15.4.2 派生類構造函數
15.4.3 復制控制和繼承
15.4.4 虛析構函數
15.4.5 構造函數和析構函數中的虛函數
15.5 繼承情況下的類作用域
15.5.1 名字查找在編譯時發生
15.5.2 名字沖突與繼承
15.5.3 作用域與成員函數
15.5.4 虛函數與作用域
15.6 純虛函數
15.7 容器與繼承
15.8 句柄類與繼承
15.8.1 指針型句柄
15.8.2 復制未知類型
15.8.3 句柄的使用
15.9 再談文本查詢示例
15.9.1 面向對象的解決方案
15.9.2 值型句柄
15.9.3 Query_base類
15.9.4 Query句柄類
15.9.5 派生類
15.9.6 eval函數
小結
術語
第16章 模板與泛型編程
16.1 模板定義
16.1.1 定義函數模板
16.1.2 定義類模板
16.1.3 模板形參
16.1.4 模板類型形參
16.1.5 非類型模板形參
16.1.6 編寫泛型程序
16.2 實例化
16.2.1 模板實參推斷
16.2.2 函數模板的顯式實參
16.3 模板編譯模型
16.4 類模板成員
16.4.1 類模板成員函數
16.4.2 非類型形參的模板實參
16.4.3 類模板中的友元聲明
16.4.4 Queue和QueueItem的友元聲明
16.4.5 成員模板
16.4.6 完整的Queue類
16.4.7 類模板的static成員
16.5 一個泛型句柄類
16.5.1 定義句柄類
16.5.2 使用句柄
16.6 模板特化
16.6.1 函數模板的特化
16.6.2 類模板的特化
16.6.3 特化成員而不特化類
16.6.4 類模板的部分特化
16.7 重載與函數模板
小結
術語
第五部分 高級主題
第17章 用于大型程序的工具
17.1 異常處理
17.1.1 拋出類類型的異常
17.1.2 棧展開
17.1.3 捕獲異常
17.1.4 重新拋出
17.1.5 捕獲所有異常的處理代碼
17.1.6 函數測試塊與構造函數
17.1.7 異常類層次
17.1.8 自動資源釋放
17.1.9 auto_ptr類
17.1.10 異常說明
17.1.11 函數指針的異常說明
17.2 命名空間
17.2.1 命名空間的定義
17.2.2 嵌套命名空間
17.2.3 未命名的命名空間
17.2.4 命名空間成員的使用
17.2.5 類、命名空間和作用域
17.2.6 重載與命名空間
17.2.7 命名空間與模板
17.3 多重繼承與虛繼承
17.3.1 多重繼承
17.3.2 轉換與多個基類
17.3.3 多重繼承派生類的復制控制
17.3.4 多重繼承下的類作用域
17.3.5 虛繼承
17.3.6 虛基類的聲明
17.3.7 特殊的初始化語義
小結
術語
第18章 特殊工具與技術
18.1 優化內存分配
18.1.1 C++中的內存分配
18.1.2 allocator類
18.1.3 operator new函數和operator delete函數
18.1.4 定位new表達式
18.1.5 顯式析構函數的調用
18.1.6 類特定的new和delete
18.1.7 一個內存分配器基類
18.2 運行時類型識別
18.2.1 dynamic_cast操作符
18.2.2 typeid操作符
18.2.3 RTTI的使用
18.2.4 type_info類
18.3 類成員的指針
18.3.1 聲明成員指針
18.3.2 使用類成員的指針
18.4 嵌套類
18.4.1 嵌套類的實現
18.4.2 嵌套類作用域中的名字查找
18.5 聯合︰節省空間的類
18.6 局部類
18.7 固有的不可移植的特征
18.7.1 位域
18.7.2 volatile限定符
18.7.3 鏈接指示︰extern“C”
小結
術語
附錄 標準庫
索引
C++編程規範
 

作為目前業界廣泛使用的編程語言,C++可謂包羅萬象、博大精深。20年來,講述C++的圖書早已經汗牛充棟、層出不窮,但其中業界公認的完整涵蓋C++標準的權威著作只有兩部,曾經有評論將之喻為“倚天屠龍”。其中一部當然是C++之父Bjarne Stroustrup所著的《C++程序設計語言》,內容精闢深刻,但是要求較高,只適合有一定經驗的程序員提升功力之用。而另一部就是本書,自1989年初版以來,歷經多次修訂,始終保持了內容全面準確、循序漸進、明快易讀的特色,早已奠定了無可替代的經典地位。原版到第3版就累積銷售了45萬冊以上,第3版的中文版引入國內時,也產生了極大影響,甚至曾經出現過洛陽紙貴的局面。

本書的成功當然離不開強大的作者陣容。本書第一作者Stanley Lippman早在C++還處于萌芽時期就是Stroustrup所在的C++編譯器項目團隊的成員,目前又在微軟領導Visual C++和CLI的開發,對C++可以說是了如指掌,實踐經驗極為豐富,加之多年來著書撰文不輟,在開發社區深孚眾望,已成為公認的大師級人物。第二作者Josee Lajoie從第3版開始加入,她曾經在IBM從事CH編譯器開發,並擔任過ISO C++標準委員會核心語言工作組主席多年,她的加盟,充分保證了本書與C++標準的兼容。

應該說,在很大程度上本書的第3版已臻完美。但是拿到第4版樣書之後,我們發現新版完全不是對前版的簡單擴充,不僅在布局結構上進行了徹底更新和重新規劃,對具體文字和實例也進行了大幅改動,兩個版本甚至很難找到相同的段落。在並無新版本的CH標準定案發布的情況下,作者撰寫新版而且做出這麼大修訂的原因何在?而新版又有何重要改進呢?

眾所周知,C++從C語言繼承而來的歷史包袱,C++對多種編程風格的支持,以及各種誤解和不良習慣,都大大增加了C++教學和使用的復雜性,而傳統教材和教學方法的各種弊端更加劇了這一情況,使C++成為不少人望而生畏的難學難用的“專家語言”。

閱讀本書後,我們不得不承認,幾位大師級作者很好地回應了上述挑戰。這里我們應該特別提到本書新版增加的第三作者Barbara Moo。她作為項目經理,曾經領導了包括Stroustrup和Lippman在內的貝爾實驗室C++編譯器團隊。她在斯坦福大學教授C++課程的豐富經驗和教學改革成果,對本書新版產生了重大影響。

相比之下,本書第4版主要有如下特點。

‧反映了現代理念。新版緊扣C++語言當前的應用趨勢——更加關注程序員的開發效率而不是系統的運行效率,摒棄了傳統的闡述方式,不再注重低層編程技術,而是從一開始就強調標準庫的使用,讓人耳目一新。

‧突出了實踐性。新版在繼承了本書原有特色——全面、詳細、準確地介紹C++知識點的基礎上,特別注重介紹那些實際開發中通用的、行之有效的編程技術。在特定場合,從C++提供的豐富“武器庫”中應該選擇哪些設施,應該注意哪些問題,業界已經總結了哪些優秀的編程實踐和易犯的錯誤等,本書均有詳細的論述,而這些正是目前其他C++圖書所缺乏的。

‧增加了教學環節,改善了可讀性。新版版式設計非常適合閱讀,而且每一章都精心組織了重要術語、小結、大量示例和習題,文中另有豐富的額外提示和交叉引用,便于讀者查找復習,消化核心概念,鞏固所學知識。

我們在翻譯過程中深深感到,本書新版在經典前版的基礎上又有了質的飛躍,體現了世界C++教學方面的最新進展和最高水平。我們衷心希望本書中文舨的出版,能夠推動國內C++教學和使用的發展。

參加本書翻譯工作的有李師賢、蔣愛軍、梅曉勇、林瑛,全書由李師賢審校。參與部分校對或錄入工作的還有古思山、黎永基、陳曉君、劉海偉等,在此對他們的工作表示衷心的感謝!

感謝人民郵電出版社圖靈公司的編輯們,他們為保證本書的質量做了大量的工作。

由于書中概念和術語數目繁多,且有許多概念和術語目前尚無公認的中文譯法,加之譯者水平所限,譯文中不當之處,懇請讀者批評指正。
網路書店 類別 折扣 價格
  1. 新書
    87
    $673