C++ 新經典

王健偉

  • 出版商: 清華大學
  • 出版日期: 2020-08-01
  • 售價: $834
  • 貴賓價: 9.5$792
  • 語言: 簡體中文
  • 頁數: 717
  • 裝訂: 平裝
  • ISBN: 7302549729
  • ISBN-13: 9787302549727
  • 相關分類: C++ 程式語言
  • 立即出貨

  • C++ 新經典-preview-1
  • C++ 新經典-preview-2
  • C++ 新經典-preview-3
C++ 新經典-preview-1

買這商品的人也買了...

商品描述

本書是一部C/C++編程語言書,定位在C/C++語言本身的講解上面。本書包含紙質圖書以及教學源代碼文件。 本書共分為3部分。第1部分為C/C++語言概述(第1章),主要介紹了C和C++語言的起源,市場需求、就業形勢及如何搭建語言開發環境等內容。第2部分為C語言(第2~12章),主要介紹C語言的各種開發知識,包括基礎知識,如常量、變量、表達式、程序結構、數組、函數等,也包括高級知識,如指針、結構、位運算、文件等,本部分的學習是為後面的學習打基礎。第3部分為C++語言(第13~20章),主要介紹C++語言的各種開發知識,包括基礎知識,如面向對象編程、命名空間、容器、迭代器,也包括類的詳細介紹、模板與泛型的詳細介紹; 高級知識,如智能指針詳細介紹、並發與多線程詳細介紹; 擴展知識,如內存高級話題、STL標準模板庫大局觀; C++11新標準,如可調用對象、萬能引用、函數模板類型推斷、引用折疊、完美轉發、auto推斷、decltype、lambda表達式、初始化列表、類型萃取等。 本書以擇業為導向,涵蓋90%的C/C++語言常用開發知識,通俗易懂,範例眾多,對於希望從事C/C++開發的讀者極具實用價值,本書是一本不可多得的、值得珍藏並能夠陪伴讀者數年甚至數十年的參考書。 本書主要適合以下幾類讀者: (1) C/C++語言初學者或者由其他電腦語言轉到C/C++語言的程序員。 (2) 從事C/C++開發多年的程序員,希望能夠詳細地復習一下基礎的C/C++知識,把整個知識線串一串,形成一個比較完整的學習體系。 (3) 已經掌握C++98標準,但是需要進一步學習C++11/14/17新標準的程序員。

目錄大綱

目錄
第1部分C/C++語言概述
第1章C/C++語言
1.1C和C++語言的起源、特點、關系與講解範疇
1.2C/C++語言的市場需求與就業需求分析
1.3再談C/C++就業
1.4搭建語言開發環境

第2部分C語言
第2章數據類型、運算符與表達式
2.1常量、變量、整型、實型和字符型
2.1.1如何創建最基本的能運行的C程序
2.1.2C語言的數據類型
2.1.3常量和變量
2.1.4整型數據
2.1.5實型數據
2.1.6字符型數據
2.1.7字符串變量
2.1.8變量賦初值
2.1.9數值型數據之間的混合運算
2.2算術運算符和表達式
2.2.1C語言的運算符
2.2.2算術運算符和算術表達式
2.2.3運算符優先級問題
2.2.4強制類型轉換運算符
2.2.5自增和自減運算符
2.3賦值運算符和逗號運算符
2.3.1賦值運算符和賦值表達式
2.3.2逗號運算符和逗號表達式

第3章程序的基本結構和語句
3.1C語言的語句和程序的基本結構
3.1.1語句的分類
3.1.2程序的三種基本結構
3.1.3賦值語句的特殊寫法
3.2數據的輸出與數據的輸入
3.2.1數據的輸出
3.2.2數據的輸入

第4章邏輯運算和判斷選擇
4.1關系運算符、關系表達式與邏輯運算符、邏輯表達式
4.1.1關系運算符和關系表達式
4.1.2邏輯運算符和邏輯表達式
4.2if語句詳解
4.2.1if語句的三種形式
4.2.2if語句的嵌套
4.3條件運算符和switch語句
4.3.1條件運算符
4.3.2switch語句

第5章循環控制
5.1循環控制語句簡介與goto、while、do…while語句精解
5.1.1循環控制語句簡介
5.1.2goto語句
5.1.3while語句
5.1.4do…while語句
5.2for語句精解
5.2.1for語句的一般形式
5.2.2for語句的主要說明
5.3循環的嵌套、比較與break語句、continue語句
5.3.1循環的嵌套
5.3.2幾種循環語句的比較
5.3.3break語句和continue語句

第6章數組
6.1一維數組
6.1.1一維數組的一般形式
6.1.2一維數組元素的引用
6.1.3一維數組的初始化
6.2二維數組
6.2.1二維數組的一般形式
6.2.2二維數組元素的引用
6.2.3二維數組的初始化
6.3字符數組
6.3.1字符數組的定義
6.3.2字符數組的初始化
6.3.3字符串和字符串結束標記
6.3.4字符數組的輸入/輸出
6.3.5字符串處理函數

第7章函數
7.1函數的基本概念和定義
7.1.1函數的基本概念
7.1.2函數的定義和返回值
7.2函數調用方式和嵌套調用
7.2.1函數調用的一般形式
7.2.2函數調用的方式
7.2.3函數的嵌套調用
7.3函數遞歸調用精彩演繹
7.3.1函數遞歸調用的定義
7.3.2遞歸調用的出口
7.3.3遞歸的優缺點及是否必須用遞歸
7.3.4遞歸的實際運用簡介
7.4數組作為函數參數
7.4.1數組元素作為函數實參
7.4.2數組名作為函數實參
7.4.3用多維數組作為函數實參
7.5局部變量和全局變量
7.5.1局部變量
7.5.2全局變量
7.6變量的存儲和引用與內部和外部函數
7.6.1變量的存儲類別
7.6.2局部變量的存儲方式
7.6.3全局變量跨文件引用
7.6.4函數的跨文件調用
7.6.5static關鍵字用法總結

第8章編譯預處理
8.1宏定義
8.1.1不帶參數的宏定義
8.1.2帶參數的宏定義
8.2文件包含和條件編譯
8.2.1文件包含
8.2.2條件編譯

第9章指針
9.1指針的基本概念詳解
9.1.1前提知識
9.1.2地址的概念
9.1.3直接訪問和間接訪問
9.2變量的指針和指向變量的指針變量
9.2.1指針變量的定義
9.2.2指針變量的引用
9.2.3指針變量作為函數參數
9.3數組的指針和指向數組的指針變量
9.3.1指向數組元素的指針變量的定義和賦值
9.3.2通過指針引用數組元素
9.3.3數組名作為函數參數
9.3.4回顧二維數組和多維數組的概念
9.3.5指向多維數組的指針和指針變量探究
9.3.6指針數組和數組指針
9.3.7多維數組的指針作為函數參數
9.4字符串的指針和指向字符串的指針變量
9.4.1字符串表示形式
9.4.2字符串指針作為函數參數
9.4.3字符指針變量與字符數組
9.5函數指針和返回指針值的函數
9.5.1用函數指針變量調用函數
9.5.2把指向函數的指針變量作為函數參數
9.5.3返回指針值的函數
9.6指針數組、指針的指針與main函數參數
9.6.1指針數組概念回顧
9.6.2指向指針的指針
9.6.3指針數組作為main函數參數
9.7本章小結

第10章結構體與共享體
10.1結構體變量定義、引用與初始化
10.1.1結構體簡介
10.1.2定義結構體類型變量的方法
10.1.3結構體類型變量的引用
10.1.4結構體變量的初始化
10.2結構體數組與結構體指針
10.2.1結構體數組
10.2.2結構體指針
10.2.3用指向結構體的指針作為函數參數
10.3共享體、枚舉類型與typedef
10.3.1共享體
10.3.2枚舉類型
10.3.3用typedef定義類型

第11章位運算
11.1位的概念和位運算符簡介
11.1.1位的概念
11.1.2位運算符簡介
11.2位運算的具體應用

第12章文件
12.1文件簡介及文本、二進制文件區別
12.1.1文件簡介
12.1.2文本文件和二進制文件區別詳細解釋
12.2文件的打開、關閉、讀寫與實戰操練
12.2.1文件的打開
12.2.2文件的關閉
12.2.3文件的讀寫
12.2.4文件讀寫實戰操練
12.3將結構體寫入二進制文件再讀出
12.3.1將結構體寫入二進制文件
12.3.2從二進制文件中讀出結構體數據
12.3.3文件使用方式中"rb"和"r"、"wb"和"w"的區別

第3部分C++語言
第13章C++基本語言
13.1語言特性、工程構成與可移植性
13.1.1語言特性: 過程式、對象式程序設計
13.1.2C++程序和項目文件構成談
13.1.3編譯型語言概念與可移植性問題
13.2命名空間簡介與基本輸入/輸出精解
13.2.1命名空間簡介
13.2.2基本輸入/輸出
13.3auto、頭文件防衛、引用與常量
13.3.1局部變量和初始化
13.3.2auto關鍵字簡介
13.3.3頭文件防衛式聲明
13.3.4引用
13.3.5常量
13.4範圍for、new內存動態分配與nullptr
13.4.1範圍for語句
13.4.2動態內存分配問題
13.4.3nullptr
13.5結構、權限修飾符與類簡介
13.5.1結構回顧
13.5.2public和private權限修飾符
13.5.3類簡介
13.5.4類的組織
13.6函數新特性、inline內聯函數與const詳解
13.6.1函數回顧與後置返回類型
13.6.2inline內聯函數
13.6.3函數特殊寫法總結
13.6.4const char *、char const *與char * const 三者的區別
13.6.5函數形參中帶const
13.7string類型
13.7.1總述
13.7.2string類型簡介
13.7.3定義和初始化string對象
13.7.4string對象上的常用操作
13.8vector類型
13.8.1vector類型簡介
13.8.2定義和初始化vector對象
13.8.3vector對象上的操作
13.9迭代器精彩演繹、失效分析及彌補、實戰
13.9.1迭代器簡介
13.9.2容器的迭代器類型
13.9.3迭代器begin/end、反向迭代器rbegin/rend操作
13.9.4迭代器運算符
13.9.5const_iterator迭代器
13.9.6迭代器失效
13.9.7範例演示
13.10類型轉換: static_cast、reinterpret_cast等
13.10.1隱式類型轉換
13.10.2顯式類型轉換(強制類型轉換)
13.10.3總結

第14章類
14.1成員函數、對象復制與私有成員
14.1.1總述
14.1.2類基礎
14.1.3成員函數
14.1.4對象的復制
14.1.5私有成員
14.2構造函數詳解、explicit與初始化列表
14.2.1稱呼上的統一
14.2.2構造函數
14.2.3多個構造函數
14.2.4函數默認參數
14.2.5隱式轉換和explicit
14.2.6構造函數初始化列表
14.3inline、const、mutable、this與static
14.3.1在類定義中實現成員函數inline
14.3.2成員函數末尾的const
14.3.3mutable
14.3.4返回自身對象的引用——this
14.3.5static成員
14.4類內初始化、默認構造函數、“=default;”和“=delete;”
14.4.1類相關非成員函數
14.4.2類內初始值
14.4.3const成員變量的初始化
14.4.4默認構造函數
14.4.5“=default;”和“=delete;”
14.5拷貝構造函數
14.6重載運算符、拷貝賦值運算符與析構函數
14.6.1重載運算符
14.6.2拷貝賦值運算符(賦值運算符)
14.6.3析構函數(釋放函數)
14.6.4幾個話題
14.7子類、調用順序、訪問等級與函數遮蔽
14.7.1子類概念
14.7.2子類對象定義時調用構造函數的順序
14.7.3訪問等級(public、protected與private)
14.7.4函數遮蔽
14.8父類指針、虛/純虛函數、多態性與析構函數
14.8.1父類指針與子類指針
14.8.2虛函數
14.8.3多態性
14.8.4純虛函數與抽象類
14.8.5父類的析構函數一般寫成虛函數
14.9友元函數、友元類與友元成員函數
14.9.1友元函數
14.9.2友元類
14.9.3友元成員函數
14.10RTTI、dynamic_cast、typeid、typeinfo與虛函數表
14.10.1RTTI是什麽
14.10.2dynamic_cast運算符
14.10.3typeid運算符
14.10.4type_info類
14.10.5RTTI與虛函數表
14.11基類與派生類關系的詳細再探討
14.11.1派生類對象模型簡介
14.11.2派生類構造函數
14.11.3既當父類又當子類
14.11.4不想當基類的類
14.11.5靜態類型與動態類型
14.11.7父類、子類之間的復制與賦值
14.12左值、右值、左值引用、右值引用與move
14.12.1左值和右值
14.12.2引用分類
14.12.3左值引用
14.12.4右值引用
14.12.5std::move函數
14.12.6左值、右值總結說明
14.13臨時對象深入探討、解析與提高性能手段
14.13.1臨時對象的概念
14.13.2產生臨時對象的情況和解決方案
14.14對象移動、移動構造函數與移動賦值運算符
14.14.1對象移動的概念
14.14.2移動構造函數和移動賦值運算符概念
14.14.3移動構造函數演示
14.14.4移動賦值運算符演示
14.14.5合成的移動操作
14.14.6總結
14.15繼承的構造函數、多重繼承、類型轉換與虛繼承
14.15.1繼承的構造函數
14.15.2多重繼承
14.15.3類型轉換
14.15.4虛基類與虛繼承(虛派生)
14.16類型轉換構造函數、運算符與類成員指針
14.16.1類型轉換構造函數
14.16.2類型轉換運算符(類型轉換函數)
14.16.3類型轉換的二義性問題
14.16.4類成員函數指針
14.16.5類成員變量指針

第15章模板與泛型
15.1模板概念與函數模板的定義、調用
15.1.1模板概念
15.1.2函數模板的定義
15.1.3函數模板的調用
15.1.4非類型模板參數
15.2類模板概念與類模板的定義、使用
15.2.1類模板概念
15.2.2類模板的定義
15.2.3類模板的成員函數
15.2.4類模板名字的使用
15.2.5非類型模板參數的使用
15.3使用typename的場合、函數模板、默認模板參數與趣味寫法分析
15.3.1typename的使用場合
15.3.2函數指針作為其他函數的參數
15.3.3函數模板趣味用法舉例
15.3.4默認模板參數
15.4成員函數模板,模板顯式實例化與聲明
15.4.1普通類的成員函數模板
15.4.2類模板的成員函數模板
15.4.3模板顯式實例化與聲明
15.5using定義模板別名與顯式指定模板參數
15.5.1using定義模板別名
15.5.2顯式指定模板參數
15.6模板全特化與偏特化(局部特化)
15.6.1類模板特化
15.6.2函數模板特化
15.6.3模板特化版本放置位置建議
15.7可變參模板與模板模板參數
15.7.1可變參函數模板
15.7.2可變參類模板
15.7.3模板模板參數

第16章智能指針
16.1直接內存管理(new/delete)、創建新工程與觀察內存泄漏
16.1.1直接內存管理(new/delete)
16.1.2創建新工程與觀察內存泄漏
16.2new/delete探秘、智能指針總述與shared_ptr基礎
16.2.1new/delete探秘
16.2.2智能指針總述
16.2.3shared_ptr基礎
16.3shared_ptr常用操作、計數與自定義刪除器等
16.3.1shared_ptr引用計數的增加和減少
16.3.2shared_ptr指針常用操作
16.4weak_ptr簡介、weak_ptr常用操作與尺寸問題
16.4.1weak_ptr簡介
16.4.2weak_ptr常用操作
16.4.3尺寸問題
16.5shared_ptr使用場景、陷阱、性能分析與使用建議
16.5.1std::shared_ptr使用場景
16.5.2std::shared_ptr使用陷阱分析
16.5.3性能說明
16.5.4補充說明和使用建議
16.6unique_ptr簡介與常用操作
16.6.1unique_ptr簡介
16.6.2unique_ptr常用操作
16.7返回unique_ptr、刪除器與尺寸問題
16.7.1返回unique_ptr
16.7.2刪除器
16.7.3尺寸問題
16.8智能指針總結

第17章並發與多線程
17.1基本概念和實現
17.1.1並發、進程、線程的基本概念和綜述
17.1.2並發的實現方法
17.1.3C++11新標準線程庫
17.2線程啟動、結束與創建線程寫法
17.2.1範例演示線程運行的開始和結束
17.2.2其他創建線程的寫法
17.3線程傳參詳解、detach坑與成員函數作為線程函數
17.3.1傳遞臨時對象作為線程參數
17.3.2臨時對象作為線程參數繼續講
17.3.3傳遞類對象與智能指針作為線程參數
17.3.4用成員函數作為線程入口函數
17.4創建多個線程、數據共享問題分析與案例代碼
17.4.1創建和等待多個線程
17.4.2數據共享問題分析
17.4.3共享數據的保護實戰範例
17.5互斥量的概念、用法、死鎖演示與解決詳解
17.5.1互斥量的基本概念
17.5.2互斥量的用法
17.5.3死鎖
17.6unique_lock詳解
17.6.1unique_lock取代lock_guard
17.6.2unique_lock的第二個參數
17.6.3unique_lock的成員函數
17.6.4unique_lock所有權的傳遞
17.7單例設計模式共享數據分析、解決與call_once
17.7.1設計模式簡單談
17.7.2單例設計模式
17.7.3單例設計模式共享數據問題分析、解決
17.7.4std::call_once
17.8condition_variable、wait、notify_one與notify_all
17.8.1條件變量std::condition_variable、wait與notify_one
17.8.2上述代碼深入思考
17.8.3notify_all
17.9async、future、packaged_task與promise
17.9.1std::async和std::future創建後台任務並返回值
17.9.2std::packaged_task
17.9.3std::promise
17.9.4小結
17.10future其他成員函數、shared_future與atomic
17.10.1std::future的其他成員函數
17.10.2續談std::async的不確定性問題
17.10.3std::shared_future
17.10.4原子操作std::atomic
17.11Windows臨界區與其他各種mutex互斥量
17.11.1Windows臨界區
17.11.2多次進入臨界區試驗
17.11.3自動析構技術
17.11.4recursive_mutex遞歸的獨占互斥量
17.11.5帶超時的互斥量std::timed_mutex和std::recursive_timed_mutex
17.12補充知識、線程池淺談、數量談與總結
17.12.1知識點補充
17.12.2淺談線程池
17.12.3線程創建數量談
17.12.4C++11多線程總結

第18章內存高級話題
18.1new、delete的進一步認識
18.1.1總述與回顧
18.1.2從new說起
18.2new內存分配細節探秘與重載類內operator new、delete
18.2.1new內存分配細節探秘
18.2.2重載類中的operator new和operator delete操作符
18.2.3重載類中的operator new[]和operator delete[]操作符
18.3內存池概念、代碼實現和詳細分析
18.3.1內存池的概念和實現原理簡介
18.3.2針對一個類的內存池實現演示代碼
18.3.3內存池代碼後續說明
18.4嵌入式指針概念及範例、內存池改進版
18.4.1嵌入式指針
18.4.2內存池代碼的改進
18.5重載全局new/delete、定位new及重載
18.5.1重載全局operator new和operator delete操作符
18.5.2定位new(placement new)
18.5.3多種版本的operator new重載

第19章STL標準模板庫大局觀
19.1STL總述、發展史、組成與數據結構談
19.1.1幾個概念與推薦書籍
19.1.2算法和數據結構談
19.1.3STL發展史和各個版本
19.1.4標準庫的使用說明
19.1.5STL的組成部分
19.2容器分類與array、vector容器精解
19.2.1容器的分類
19.2.2容器的說明和簡單應用
19.3容器的說明和簡單應用例續
19.3.1deque和stack
19.3.2queue
19.3.3list
19.3.4其他
19.4分配器簡介、使用與工作原理說
19.4.1分配器簡介
19.4.2分配器的使用
19.4.3其他的分配器與原理說
19.4.4自定義分配器
19.5迭代器的概念和分類
19.5.1迭代器基本概念
19.5.2迭代器的分類
19.6算法簡介、內部處理與使用範例
19.6.1算法簡介
19.6.2算法內部一些處理
19.6.3一些典型算法使用範例
19.7函數對象回顧、系統函數對象與範例
19.7.1函數對象/仿函數回顧
19.7.2標準庫中定義的函數對象
19.7.3標準庫中定義的函數對象範例
19.8適配器概念、分類、範例與總結
19.8.1適配器基本概念
19.8.2容器適配器
19.8.3算法適配器
19.8.4迭代器適配器
19.8.5總結

第20章高級話題與新標準
20.1函數調用運算符與function類模板
20.1.1學習C++的體會
20.1.2函數調用運算符
20.1.3不同調用對象的相同調用形式
20.1.4標準庫function類型簡介
20.1.5總結
20.2萬能引用
20.2.1類型區別基本概念
20.2.2universal reference基本認識
20.2.3萬能引用資格的剝奪與辨認
20.3理解函數模板類型推斷與查看類型推斷結果
20.3.1如何查看類型推斷結果
20.3.2理解函數模板類型推斷
20.4引用折疊、轉發、完美轉發與forward
20.4.1引用折疊規則
20.4.2轉發與完美轉發
20.4.3std::forward
20.4.4std::move和std::forward的區別
20.4.5再談萬能引用
20.5理解auto類型推斷與auto應用場合
20.5.1auto類型常規推斷
20.5.2auto類型針對數組和函數的推斷
20.5.3auto類型std::initializer_list的特殊推斷
20.5.4auto不適用場合舉例
20.5.5auto適用場合舉例
20.6詳解decltype含義與decltype主要用途
20.6.1decltype含義和舉例
20.6.2decltype主要用途
20.6.3總結
20.7可調用對象、std::function與std::bind
20.7.1可調用對象
20.7.2std::function可調用對象包裝器
20.7.3std::bind綁定器
20.7.4總結
20.8lambda表達式與for_each、find_if簡介
20.8.1用法簡介
20.8.2捕獲列表
20.8.3lambda表達式延遲調用易出錯細節分析
20.8.4lambda表達式中的mutable
20.8.5lambda表達式的類型和存儲
20.8.6lambda表達式再演示和優點總結
20.9lambda表達式捕獲模式的陷阱分析和展示
20.9.1捕獲列表中的&
20.9.2形參列表可以使用auto
20.9.3成員變量的捕獲問題
20.9.4廣義lambda捕獲
20.9.5靜態局部變量
20.10可變參數函數、initializer_list與省略號形參
20.10.1可變參數函數
20.10.2initializer_list(初始化列表)
20.10.3省略號形參
20.11萃取技術概念與範例等
20.11.1類型萃取簡介
20.11.2類型萃取範例
20.11.3迭代器萃取簡介
20.11.4總結
後記IT職業發展的未來之路