《從新手到高手C++全方位學習》是2009年9月科學出版社出版的圖書,作者是范磊。本書主要介紹了關於C++語言的基礎教學與相關技術的理解和運用。
基本介紹
- 書名:從新手到高手C++全方位學習
- 作者:范磊
- ISBN:9787030247063
- 類別:計算機與網路
- 出版社:科學出版社
- 發行時間:2009年09月
簡介,目錄,
簡介
《從盛尋新手到高手C++全方位學習》總結了十幾本C++圖書及教材的優點,擯棄了它們語言拖沓、層次結構混亂等缺陷,從零開始、由淺入深、層層遞進、細緻而又詳盡地講解C++這門大型程式語言。《從新手到高手C++全方位學習》知識系統全面,擁有字典般的容量,可隨用隨查,涵蓋指針、面向對象、操作符重載、流、命名空問、模板、異常處理、宏等主流C++開發技術。為了使讀者能夠活學活用,《從新手到高手C++全方位學習》針對重要的概念精心設計了438個實用範例,囊括大量經驗和技巧,即使已從事C++工作多年的朋友,也能從中汲取新的養料。《從新手到高手C++全方位學習》適合於從未學習過任何程式語言的新手,以及學習C++多年,仍舊不能融會貫通的讀者,對於正在使用C++進行開發的程式設計師也有很好的參考價值。
這裡,我照嘗想拔將原始光碟中的“視頻教程”和“原始碼”分開發布,以方便各位按需下載。
光碟提供的視頻教程,包含了第1章到第17章的內容,網上有18、19章的教程,這個光碟沒有包括。
目錄
第1章 初識C++
1.1 C++簡介
1.2 C++與C的區別
1.3 學習C++之前需要先學C嗎
1.4 C++與其他語言霉犁挨罪的區別
1.5 C++的版本以及安裝問題
第2章 做一個最簡短的C++程式
2.1 簡單的螢幕輸出小程式
2.2 輸出語句的使用
2.3 std::介紹狼定殼
2.4 iostream與iostream.h的區別
2.5 重名問題
2.6 注釋
第3章 初步了解函式
3.1 一個簡單的函式
3.2 函式的傳參
3.3 函式的返回值. 參數與變數
3.4 函式的聲明與定義
3.5 局部變數
3.6 全局變數
第4章 C++數據類型
4.1 變數的定義
4.2 將變數及數據存儲在記憶體中
4.3 布爾型變數
4.4 字元型變數
4.5 wchar_t雙位元組型變數
4.6 整型概述
4.7 整型變數的定義
4.8 浮譽達龍點型變數
4.9 常量
4.10 枚舉型常量
第5章 if語句與邏輯運算符
5.1 語句的定義
5.2 塊的定義
5.3 表達式的定義
5.4 運算符的定義
5.4.1 賦值運算符的定義
5.4.2 數學運算符的定義
5.4.3 賦值運算符與數學運算符的聯合
5.5 自加與自減
5.5.1 前置
5.5.2 後置
5.6 表達式的優先權
5.7 關係運算符
5.8 if語句
5.8.1 else語句
5.8.2 else if語句
5.8.3 if語句的嵌套
5.9 邏輯運算符及其使用
5.9.1 邏輯“與”
5.9.2 邏輯“或”
5.9.3 邏輯“非”
5.9.4 邏輯運算符的優先權
5.9.5 運算式的真假關係
5.10 三目運算符
5.10.1 三目運算符的優先問題
5.10.2 三目運算符的使用問題
5.10.3 三目運算符的型別問題
5.10.4 三目運算符在字元型變數中的使用
5.11 複雜嵌套的if語句
第6章 面向對象
6.1 面向對象程式語言的主要特徵
6.2 類. 對象和成員
6.3 類. 對象和成員的使用方法及區歸艱抹別
6.3.1 聲明一個類
6.3.2 命名習慣
6.3.3 定義一個對象
6.3.4 類與對象的區別
6.3.5 對象與成員的關係
6.3.6 不要給類賦值
6.3.7 對象只能調用類中存在的成員
6.4 公有
6.5 私有
6.6 成員函式的聲明和定義
6.7 為什麼將成員函式的聲明和定義分開
6.7.1 普通內聯函式
6.7.2 成員內聯函式
6.8 將類聲明和定義部分保存在頭檔案中
6.9 const成員函式
6.10 構造函式
6.11 默認構造函式
6.12 析構函式
6.13 析構對象數組
第7章 循環語句
7.2 慎用goto語句
7.3 while語句
7.3.1 帶運算符的while語句
7.3.2 以字元為條件的while語句
7.3.3 限定while循環的次數
7.3.4 continue語句
7.3.5 break語句
7.3.6 永不休止的while循疊勸充環
7.4 do… while循環
7.5 for循環
7.5.1 靈活的for循環
7.5.2 條件為空的for循環
7.5.3 執行為空的for循環
7.5.4 嵌套的for循環
7.6 switch語句
7.6.1 switch語句常見錯誤
7.6.2 switch的選單功能
7.7 總結
第8章 指針
8.1 什麼是地址
8.2 用指針來保存地址
8.2.1 空指針
8.2.2 指針與變數類型
8.2.3 用指針來訪問值
8.2.4 指針地址. 指針保存的地址和該地址的值
8.2.5 指針對數值的操作
8.2.6 更換指針保存的地址
8.3 為什麼使用指針
8.3.1 棧和堆
8.3.2 用指針創建堆中空間
8.3.3 用指針刪除堆中空間
8.4 動態記憶體
8.4.1 記憶體泄漏
8.4.2 在堆中創建對象
8.4.3 在堆中刪除對象
8.4.4 訪問堆中的數據成員
8.4.5 在構造函式中開闢記憶體空間
8.4.6 對象在棧與堆中的不同
8.5 this指針
8.6 指針的常見錯誤
8.7 指針運算
8.7.1 指針的加減運算
8.7.2 指針的賦值運算
8.7.3 指針的相減運算
8.7.4 指針的比較運算
8.8 指針
8.8.1 常量指針
8.8.2 指向常量的指針
8.8.3 指向常量的常指針
8.9 總結
第9章 引用
9.1 什麼是引用
9.1.1 引用的地址
9.1.2 引用就是別名常量
9.1.3 引用對象
9.1.4 空引用
9.2 函式的參數傳遞
9.2.1 通過值來傳遞函式參數
9.2.2 通過指針來傳遞函式參數
9.2.3 通過引用來傳遞函式參數
9.2.4 讓函式返回多個值
9.3 傳遞對象
9.3.1 用值來傳遞對象
9.3.2 使用指針來傳遞對象
9.3.3 使用const指針來傳遞對象
9.3.4 使用引用來傳遞對象
9.3.5 到底是使用引用還是指針
9.3.6 引用和指針可以一塊用
9.4 引用應注意的問題
9.4.1 引用容易犯的錯誤
9.4.2 引用一個按值返回的堆中對象
9.4.3 引用一個按別名返回的堆中對象
9.4.4 在哪裡創建,就在哪裡釋放
9.5 總結
第10章 深入函式
10.1 函式重載
10.1.1 普通函式的重載
10.1.2 成員函式的重載
10.2 函式的默認參數
10.3 重載構造函式
10.3.1 成員變數的初始化
10.3.2 成員變數的初始化與構造函式
10.3.3 複製構造函式
10.3.4 構造函式和new運算符
10.3.5 再談默認構造函式
10.4 析構函式和delete運算符
10.4.1 默認析構函式
10.4.2 調用構造函式進行類型轉換
10.5 淺層複製構造函式
10.6 深層複製構造函式
第11章 運算符重載
11.1 運算符重載
11.2 在成員函式中實現自加
11.3 重載前置自加運算符
11.4 創建臨時對象
11.5 創建無名臨時對象
11.6 取消創建臨時對象
11.7 重載後置自加運算符
11.8 重載加法運算函式operator+
11.9 重載賦值運算函式operator=
11.10 轉換類型運算符
11.10.1 溫習調用構造函式實現的類型轉換
11.10.2 通過構造函式將變數轉換為一個對象的成員變數
11.10.3 通過operator關鍵字進行轉換
11.11 什麼可以被重載,什麼不可以
第12章 繼承
12.1 什麼是繼承和派生
12.1.1 複雜的繼承和派生
12.1.2 繼承和派生如何在C++中實現
12.1.3 繼承的種類及語法
12.1.4 單一繼承
12.2 公有型. 保護型和私有型
12.3 訪問許可權
12.4 多重繼承
12.5 繼承的構造與析構
12.6 向基類構造函式傳遞參數
12.7 繼承和重載的兩義性問題
12.7.1 多重繼承容易產生兩義性
12.7.2 兩義性在重載時的一些問題
12.7.3 兩義性的歸屬問題
12.7.4 減少兩義性產生的混淆問題
12.7.5 虛基類不會產生兩義性
12.8 總結
第13章 虛函式
13.1 指向對象的指針
13.2 虛函式
13.3 拳擊遊戲
13.4 繼承是否可以實現多態性
13.5 在編譯時的靜態聯編
13.6 在運行時的靜態聯編
13.7 在編譯時的動態聯編
13.8 在運行時的動態聯編
13.9 調用虛函式
13.9.1 在虛函式中調用成員函式
13.9.2 三種調用虛函式的方式比較
13.10 被繼承的虛函式仍然是虛函式
13.11 系統是如何調用虛函式的
13.12 在虛函式中使用成員名限定
13.13 虛析構函式
第14章 數組
14.1 數組的基本用法
14.1.1 什麼是數組
14.1.2 數組元素
14.1.3 數組下標越界
14.1.4 倒序輸出
14.1.5 將數組的下標定義為常量
14.1.6 手動運算元組元素
14.1.7 數組的初始化
14.2 數組的用途
14.2.1 求平均考試成績
14.2.2 兔子繁殖問題
14.2.3 數字排序問題
14.3 數組在記憶體中的分布
14.4 輸出數組名
14.5 數組名與函式
14.6 傳遞與接收
14.7 數組與函式
14.7.1 函式傳參實例一——求數組所有元素的和
14.7.2 函式傳參實例二——用遞增法查找數據
14.7.3 函式傳參實例三——用二分法查找數據
14.7.4 函式傳參實例四——判斷數組是否按照順序排列
14.7.5 函式傳參實例五——判斷數組排列方式後執行不同的函式
14.8 數組在對象中的傳參
14.9 數組對象
14.10 在數組對象中初始化成員變數
14.11 指針數組
14.12 枚舉常量與數組..
14.13 多維數組
14.14 多維數組的初始化
14.15 字元數組
14.16 重載數組下標操作符
第15章 鍊表
15.1 聲明鍊表結構
15.2 簡單的圖書鍊表
15.2.1 圖書鍊表
15.2.2 類的鍊表
15.3 動態鍊表
15.3.1 動態鍊表的建立
15.3.2 解決輸入字元造成死循環的問題
15.3.3 動態鍊表的顯示
15.3.4 動態鍊表的刪除
15.3.5 動態鍊表的插入
15.3.6 鍊表統計
15.3.7 使用鍊表
15.4 完整的動態鍊表清單
15.5 鍊表使用案例——走迷宮
15.5.1 創建Windows應用程式項目
15.5.2 創建視窗
15.5.3 載入圖片
15.5.4 句柄是什麼
15.5.5 顯示圖片
15.5.6 動畫
15.5.7 鍵盤控制人物移動
15.5.8 迷宮牆壁
15.5.9 走迷宮
15.5.10 用鍊表記錄行走路線
第16章 多態性
16.1 為什麼要使用多重繼承
16.2 在派生類中增加函式
16.3 使用多重繼承
16.4 多重繼承中初始化構造函式的參數
16.5 多個子基類共享一個父基類
16.6 虛基類
16.7 慎用多重繼承
16.8 空的虛函式
16.9 抽象類和純虛函式
16.10 純虛函式
16.11 複雜的抽象結構
第17章 類的特殊成員
17.1 靜態成員變數
17.2 私有靜態成員變數
17.3 靜態成員函式
17.4 靜態成員的使用
17.5 函式指針
17.6 函式指針數組
17.7 函式指針也可以作為函式的參數
17.8 使用typedef簡化函式指針的聲明及定義
17.9 類的函式指針
17.10 成員函式指針數組
第18章 字元串
18.1 char型字元串
18.2 string型字元串
18.2.1 string型字元串的賦值
18.2.2 string型字元串的合併
18.2.3 string型字元串的部分合併
18.2.4 string型字元串的替換
18.2.5 string型字元串的複製
18.2.6 string型字元串的插入
18.2.7 string型字元串的刪除
18.2.8 string型字元串的查找
18.2.9 string型字元串的比較
18.2.10 判斷string型字元串是否為空
18.3 字元串的使用
18.3.1 swap() 交換兩個字元串的內容
18.3.2 將string型字元串轉為char型字元串
18.3.3 char型字元串與函式
18.3.4 函式如何返回字元串
18.4 結構體
18.4.1 結構體的賦值
18.4.2 結構體與函式
18.4.3 結構體與string
18.5 string數組與函式
18.6 流的使用
18.6.1 重載輸出運算符<<
18.6.2 友元的方式重載輸出運算符
18.6.3 重載自加運算符的執行次序
18.6.4 重載輸入運算符>>
18.7 編寫一個String類
18.7.1 創建String類
18.7.2 創建可自動調節大小的String類字元串對象
18.7.3 限制數組越界
18.7.4 用複製構造函式實現字元串的賦值功能
18.7.5 用重載賦值運算符函式實現真正的字元串賦值功能
18.7.6 用重載輸出運算符operator<<()函式實現字元串的輸出
18.7.7 用重載輸入運算符operator>>()函式實現字元串的輸入
18.7.8 用重載比較運算符實現字元串的比較
18.7.9 為String類添加字元串的相加功能
18.7.10 為String類添加字元串的+=功能
18.7.11 完成後的String類
第19章 代碼重用
19.1 包含
19.2 將String類作為包含類
19.3 為book類重載執行相加運算的成員函式
19.4 包含對系統造成的消耗
19.5 按別名傳遞book對象
19.6 包含指向另一個類的指針
19.6.1 數據類Date
19.6.2 鍊表類Node
19.6.3 標籤類linkelist
19.6.4 頭節點類HeadNode
19.6.5 尾節點TailNode類
19.6.6 中間節點InterNode類
19.6.7 InterNode類的構造函式
19.6.8 InterNode類的插入函式
19.6.9 全部程式
19.7 將頭節點. 中間節點和尾節點合併為一個節點
19.7.1 數據類Date
19.7.2 由Date類派生的圖書類Book
19.7.3 由Date類派生的藥品類medica
19.7.4 創建一個節點類Node
19.7.5 用來操作節點類Node的list類
19.7.6 list類的getfirst()方法
19.7.7 list類的operator[]方法
19.7.8 list類的repeat()方法
19.7.9 list類的insert()方法
19.7.10 list類的find()方法
19.7.11 重寫的藥品管理全部程式
19.8 利用類的包含來實現代碼重用
19.9 私有繼承
19.10 什麼時候使用私有繼承,什麼時候使用包含
19.11 保護繼承
第20章 友元類與嵌套類
20.1 友元類
20.2 嵌套類
第21章 流
21.1 流的操作
21.1.1 緩衝
21.1.2 流和緩衝區
21.1.3 標準輸入輸出對象
21.1.4 重定向
21.1.5 對象代表流
21.2 用cout輸出
21.2.1 重載運算符operator<<
21.2.2 清理緩衝區
21.2.3 有關輸出的相關函式
21.2.4 設定輸出的欄位寬度
21.2.5 設定填充欄位
21.2.6 設定浮點數的顯示精度
21.2.7 輸出末尾的0
21.2.8 設定標誌
21.2.9 setf()函式原型
21.2.10 所有15個標誌以及3個指示標誌
21.2.11 unset()函式
21.2.12 標準控制符
21.2.13 iomanip頭檔案與標準控制符
21.3 用cin輸入
21.3.1 字元串的輸入
21.3.2 字元串的輸入問題
21.3.3 get()函式
21.3.4 帶字元引用參數的get()函式
21.3.5 帶2個參數的get()函式
21.3.6 帶3個參數的get()函式
21.3.7 getline()函式
21.3.8 read()函式
21.3.9 gcount()函式
21.3.10 peek()函式
21.3.11 putback()函式
21.4 檔案的輸入和輸出
21.4.1 輸出數據到檔案
21.4.2 讀取檔案中的數據
21.4.3 讀取空格及空格後面的字元
21.5 多種打開檔案的方式
21.6 檢查檔案是否打開
21.7 二進制檔案和文本檔案
21.7.1 以文本形式輸出到檔案
21.7.2 以二進制形式輸出到檔案
21.8 打開多個檔案
21.9 命令行處理檔案
21.10 使用命令行處理檔案例程
21.11 指定讀取檔案中的數據
21.12 輸出數據到檔案指定位置處
21.13 seekp()和seekg()函式的結合使用
21.14 臨時檔案
21.15 sstream字元串輸入輸出流類
第22章 命名空間
22.1 什麼是命名空間
22.2 創建命名空間
22.2.1 擴充命名空間的內容
22.2.2 儘量在命名空間之外定義函式
22.2.3 命名空間中的成員都是公有的
22.3 使用命名空間
22.4 使用關鍵字using
22.5 為你的命名空間取個別名
22.6 未命名的命名空間
22.6.1 未命名命名空間與全局變數的區別
22.6.2 未命名命名空間與static的區別
22.6.3 未命名命名空間. static與extern的區別
22.7 標準命名空間std
第23章 模板
23.1 什麼是模板
23.2 重載模板
23.3 具體化函式模板
23.3.1 函式模板不能重載
23.3.2 具體化函式模板解決重載問題
23.3.3 具體化函式模板與實例化模板函式
23.4 普通函式. 函式模板與具體化函式模板的優先權
23.4.1 普通函式和函式模板的執行次序
23.4.2 函式模板與具體化函式模板的執行次序
23.4.3 具體化函式模板與普通函式的優先權
23.5 函式模板的匹配
23.6 類模板的定義
23.7 複雜類模板
23.8 數組模板
23.9 對象數組模板
23.10 具有多個參數的模板
23.11 為模板參數提供默認值
23.12 約束模板
23.13 模板成員
23.14 將模板用作參數
23.15 模板和友元
23.15.1 非模板友元類和友元函式
23.15.2 通用模板友元類和友元函式
23.15.3 特定類型模板友元函式
23.16 多餘的臨時對象
23.17 靜態成員和模板
23.18 標準模板庫
23.18.1 容器
23.18.2 順序容器
23.18.3 關聯容器
23.18.4 算法類
23.18.5 總結
第24章 異常和錯誤處理
24.1 異常
24.2 設定多條catch語句
24.3 異常的派生
24.4 創建異常類的成員函式
24.5 異常類的虛函式
24.6 異常類與模板的關係
第25章 補充內容
25.1 預處理過程
25.1.1 預處理指令
25.1.2 #include指令
25.1.3 #define指令
25.1.4 用#define指令替換常量
25.1.5 用#define定義一個特定字元串並對其進行測試
25.1.6 #ifdef. #define和#endif的用途
25.1.7 帶參數的#define
25.1.8 宏與內聯函式
25.1.9 #運算符
25.1.10 ##運算符
25.1.11 #undef指令
25.1.12 #if指令
25.1.13 #endif指令
25.1.14 #if defined指令
25.1.15 #ifdef和#ifndef指令
25.1.16 #elif指令
25.1.17 #error指令
25.1.18 #line指令
25.1.19 #pragma 指令
25.2 預定義的宏
25.3 assert()宏
25.4 嘗試編寫一個簡單的assert()宏
25.5 不能為0的變數
25.6 用宏函式來輸出表達式的值
25.7 調試的級別
25.8 C++類型轉換及運行時類型信息(RTII)
25.8.1 動態類型轉換符
25.8.2 靜態類型轉換
25.8.3 重新解釋類型轉換
25.8.4 常類型轉換
25.8.5 運行時類型信息
25.9 關鍵字volatile
25.10 關鍵字const
25.11 關鍵字mutable
25.12 聯合數據類型union
25.13 聯合數據類型的記憶體占用
25.14 匿名聯合體
25.15 再談指針
25.15.1 指針與數組
25.15.2 指針操作多維數組
25.15.3 指向多維數組的指針作為函式參數
25.15.4 字元串的指針
25.15.5 接受字元串指針的函式
25.15.6 指向字元串的指針變數與字元數組的區別
25.15.7 指向函式的指針
25.15.8 指向函式的指針的用途
25.15.9 指針數組
25.15.10 指向指針的指針
25.16 位運算
25.16.1 按位與“&”運算符
25.16.2 按位或“|”運算符
25.16.3 異或“^”運算符
25.16.4 取反“~”運算符
25.16.5 左移“<<”運算符
25.16.6 右移“>>”運算符
25.16.7 複合位運算符
25.16.8 不同長度數字的位運算
25.16.9 位運算的實例
25.17 位欄位
25.18 區域差異
25.18.1 locale類
25.18.2 默認區域表示或全局區域表示
25.18.3 時間與地理設定
25.18.4 locale與time.h中時間函式的搭配使用
25.18.5 區域表示locale與流的搭配使用
25.18.6 區域表示locale與模板的搭配使用
附錄A ASCII碼對照表
附錄B C++的關鍵字
附錄C C++常用頭檔案列表
5.8.3 if語句的嵌套
5.9 邏輯運算符及其使用
5.9.1 邏輯“與”
5.9.2 邏輯“或”
5.9.3 邏輯“非”
5.9.4 邏輯運算符的優先權
5.9.5 運算式的真假關係
5.10 三目運算符
5.10.1 三目運算符的優先問題
5.10.2 三目運算符的使用問題
5.10.3 三目運算符的型別問題
5.10.4 三目運算符在字元型變數中的使用
5.11 複雜嵌套的if語句
第6章 面向對象
6.1 面向對象程式語言的主要特徵
6.2 類. 對象和成員
6.3 類. 對象和成員的使用方法及區別
6.3.1 聲明一個類
6.3.2 命名習慣
6.3.3 定義一個對象
6.3.4 類與對象的區別
6.3.5 對象與成員的關係
6.3.6 不要給類賦值
6.3.7 對象只能調用類中存在的成員
6.4 公有
6.5 私有
6.6 成員函式的聲明和定義
6.7 為什麼將成員函式的聲明和定義分開
6.7.1 普通內聯函式
6.7.2 成員內聯函式
6.8 將類聲明和定義部分保存在頭檔案中
6.9 const成員函式
6.10 構造函式
6.11 默認構造函式
6.12 析構函式
6.13 析構對象數組
第7章 循環語句
7.2 慎用goto語句
7.3 while語句
7.3.1 帶運算符的while語句
7.3.2 以字元為條件的while語句
7.3.3 限定while循環的次數
7.3.4 continue語句
7.3.5 break語句
7.3.6 永不休止的while循環
7.4 do… while循環
7.5 for循環
7.5.1 靈活的for循環
7.5.2 條件為空的for循環
7.5.3 執行為空的for循環
7.5.4 嵌套的for循環
7.6 switch語句
7.6.1 switch語句常見錯誤
7.6.2 switch的選單功能
7.7 總結
第8章 指針
8.1 什麼是地址
8.2 用指針來保存地址
8.2.1 空指針
8.2.2 指針與變數類型
8.2.3 用指針來訪問值
8.2.4 指針地址. 指針保存的地址和該地址的值
8.2.5 指針對數值的操作
8.2.6 更換指針保存的地址
8.3 為什麼使用指針
8.3.1 棧和堆
8.3.2 用指針創建堆中空間
8.3.3 用指針刪除堆中空間
8.4 動態記憶體
8.4.1 記憶體泄漏
8.4.2 在堆中創建對象
8.4.3 在堆中刪除對象
8.4.4 訪問堆中的數據成員
8.4.5 在構造函式中開闢記憶體空間
8.4.6 對象在棧與堆中的不同
8.5 this指針
8.6 指針的常見錯誤
8.7 指針運算
8.7.1 指針的加減運算
8.7.2 指針的賦值運算
8.7.3 指針的相減運算
8.7.4 指針的比較運算
8.8 指針
8.8.1 常量指針
8.8.2 指向常量的指針
8.8.3 指向常量的常指針
8.9 總結
第9章 引用
9.1 什麼是引用
9.1.1 引用的地址
9.1.2 引用就是別名常量
9.1.3 引用對象
9.1.4 空引用
9.2 函式的參數傳遞
9.2.1 通過值來傳遞函式參數
9.2.2 通過指針來傳遞函式參數
9.2.3 通過引用來傳遞函式參數
9.2.4 讓函式返回多個值
9.3 傳遞對象
9.3.1 用值來傳遞對象
9.3.2 使用指針來傳遞對象
9.3.3 使用const指針來傳遞對象
9.3.4 使用引用來傳遞對象
9.3.5 到底是使用引用還是指針
9.3.6 引用和指針可以一塊用
9.4 引用應注意的問題
9.4.1 引用容易犯的錯誤
9.4.2 引用一個按值返回的堆中對象
9.4.3 引用一個按別名返回的堆中對象
9.4.4 在哪裡創建,就在哪裡釋放
9.5 總結
第10章 深入函式
10.1 函式重載
10.1.1 普通函式的重載
10.1.2 成員函式的重載
10.2 函式的默認參數
10.3 重載構造函式
10.3.1 成員變數的初始化
10.3.2 成員變數的初始化與構造函式
10.3.3 複製構造函式
10.3.4 構造函式和new運算符
10.3.5 再談默認構造函式
10.4 析構函式和delete運算符
10.4.1 默認析構函式
10.4.2 調用構造函式進行類型轉換
10.5 淺層複製構造函式
10.6 深層複製構造函式
第11章 運算符重載
11.1 運算符重載
11.2 在成員函式中實現自加
11.3 重載前置自加運算符
11.4 創建臨時對象
11.5 創建無名臨時對象
11.6 取消創建臨時對象
11.7 重載後置自加運算符
11.8 重載加法運算函式operator+
11.9 重載賦值運算函式operator=
11.10 轉換類型運算符
11.10.1 溫習調用構造函式實現的類型轉換
11.10.2 通過構造函式將變數轉換為一個對象的成員變數
11.10.3 通過operator關鍵字進行轉換
11.11 什麼可以被重載,什麼不可以
第12章 繼承
12.1 什麼是繼承和派生
12.1.1 複雜的繼承和派生
12.1.2 繼承和派生如何在C++中實現
12.1.3 繼承的種類及語法
12.1.4 單一繼承
12.2 公有型. 保護型和私有型
12.3 訪問許可權
12.4 多重繼承
12.5 繼承的構造與析構
12.6 向基類構造函式傳遞參數
12.7 繼承和重載的兩義性問題
12.7.1 多重繼承容易產生兩義性
12.7.2 兩義性在重載時的一些問題
12.7.3 兩義性的歸屬問題
12.7.4 減少兩義性產生的混淆問題
12.7.5 虛基類不會產生兩義性
12.8 總結
第13章 虛函式
13.1 指向對象的指針
13.2 虛函式
13.3 拳擊遊戲
13.4 繼承是否可以實現多態性
13.5 在編譯時的靜態聯編
13.6 在運行時的靜態聯編
13.7 在編譯時的動態聯編
13.8 在運行時的動態聯編
13.9 調用虛函式
13.9.1 在虛函式中調用成員函式
13.9.2 三種調用虛函式的方式比較
13.10 被繼承的虛函式仍然是虛函式
13.11 系統是如何調用虛函式的
13.12 在虛函式中使用成員名限定
13.13 虛析構函式
第14章 數組
14.1 數組的基本用法
14.1.1 什麼是數組
14.1.2 數組元素
14.1.3 數組下標越界
14.1.4 倒序輸出
14.1.5 將數組的下標定義為常量
14.1.6 手動運算元組元素
14.1.7 數組的初始化
14.2 數組的用途
14.2.1 求平均考試成績
14.2.2 兔子繁殖問題
14.2.3 數字排序問題
14.3 數組在記憶體中的分布
14.4 輸出數組名
14.5 數組名與函式
14.6 傳遞與接收
14.7 數組與函式
14.7.1 函式傳參實例一——求數組所有元素的和
14.7.2 函式傳參實例二——用遞增法查找數據
14.7.3 函式傳參實例三——用二分法查找數據
14.7.4 函式傳參實例四——判斷數組是否按照順序排列
14.7.5 函式傳參實例五——判斷數組排列方式後執行不同的函式
14.8 數組在對象中的傳參
14.9 數組對象
14.10 在數組對象中初始化成員變數
14.11 指針數組
14.12 枚舉常量與數組..
14.13 多維數組
14.14 多維數組的初始化
14.15 字元數組
14.16 重載數組下標操作符
第15章 鍊表
15.1 聲明鍊表結構
15.2 簡單的圖書鍊表
15.2.1 圖書鍊表
15.2.2 類的鍊表
15.3 動態鍊表
15.3.1 動態鍊表的建立
15.3.2 解決輸入字元造成死循環的問題
15.3.3 動態鍊表的顯示
15.3.4 動態鍊表的刪除
15.3.5 動態鍊表的插入
15.3.6 鍊表統計
15.3.7 使用鍊表
15.4 完整的動態鍊表清單
15.5 鍊表使用案例——走迷宮
15.5.1 創建Windows應用程式項目
15.5.2 創建視窗
15.5.3 載入圖片
15.5.4 句柄是什麼
15.5.5 顯示圖片
15.5.6 動畫
15.5.7 鍵盤控制人物移動
15.5.8 迷宮牆壁
15.5.9 走迷宮
15.5.10 用鍊表記錄行走路線
第16章 多態性
16.1 為什麼要使用多重繼承
16.2 在派生類中增加函式
16.3 使用多重繼承
16.4 多重繼承中初始化構造函式的參數
16.5 多個子基類共享一個父基類
16.6 虛基類
16.7 慎用多重繼承
16.8 空的虛函式
16.9 抽象類和純虛函式
16.10 純虛函式
16.11 複雜的抽象結構
第17章 類的特殊成員
17.1 靜態成員變數
17.2 私有靜態成員變數
17.3 靜態成員函式
17.4 靜態成員的使用
17.5 函式指針
17.6 函式指針數組
17.7 函式指針也可以作為函式的參數
17.8 使用typedef簡化函式指針的聲明及定義
17.9 類的函式指針
17.10 成員函式指針數組
第18章 字元串
18.1 char型字元串
18.2 string型字元串
18.2.1 string型字元串的賦值
18.2.2 string型字元串的合併
18.2.3 string型字元串的部分合併
18.2.4 string型字元串的替換
18.2.5 string型字元串的複製
18.2.6 string型字元串的插入
18.2.7 string型字元串的刪除
18.2.8 string型字元串的查找
18.2.9 string型字元串的比較
18.2.10 判斷string型字元串是否為空
18.3 字元串的使用
18.3.1 swap() 交換兩個字元串的內容
18.3.2 將string型字元串轉為char型字元串
18.3.3 char型字元串與函式
18.3.4 函式如何返回字元串
18.4 結構體
18.4.1 結構體的賦值
18.4.2 結構體與函式
18.4.3 結構體與string
18.5 string數組與函式
18.6 流的使用
18.6.1 重載輸出運算符<<
18.6.2 友元的方式重載輸出運算符
18.6.3 重載自加運算符的執行次序
18.6.4 重載輸入運算符>>
18.7 編寫一個String類
18.7.1 創建String類
18.7.2 創建可自動調節大小的String類字元串對象
18.7.3 限制數組越界
18.7.4 用複製構造函式實現字元串的賦值功能
18.7.5 用重載賦值運算符函式實現真正的字元串賦值功能
18.7.6 用重載輸出運算符operator<<()函式實現字元串的輸出
18.7.7 用重載輸入運算符operator>>()函式實現字元串的輸入
18.7.8 用重載比較運算符實現字元串的比較
18.7.9 為String類添加字元串的相加功能
18.7.10 為String類添加字元串的+=功能
18.7.11 完成後的String類
第19章 代碼重用
19.1 包含
19.2 將String類作為包含類
19.3 為book類重載執行相加運算的成員函式
19.4 包含對系統造成的消耗
19.5 按別名傳遞book對象
19.6 包含指向另一個類的指針
19.6.1 數據類Date
19.6.2 鍊表類Node
19.6.3 標籤類linkelist
19.6.4 頭節點類HeadNode
19.6.5 尾節點TailNode類
19.6.6 中間節點InterNode類
19.6.7 InterNode類的構造函式
19.6.8 InterNode類的插入函式
19.6.9 全部程式
19.7 將頭節點. 中間節點和尾節點合併為一個節點
19.7.1 數據類Date
19.7.2 由Date類派生的圖書類Book
19.7.3 由Date類派生的藥品類medica
19.7.4 創建一個節點類Node
19.7.5 用來操作節點類Node的list類
19.7.6 list類的getfirst()方法
19.7.7 list類的operator[]方法
19.7.8 list類的repeat()方法
19.7.9 list類的insert()方法
19.7.10 list類的find()方法
19.7.11 重寫的藥品管理全部程式
19.8 利用類的包含來實現代碼重用
19.9 私有繼承
19.10 什麼時候使用私有繼承,什麼時候使用包含
19.11 保護繼承
第20章 友元類與嵌套類
20.1 友元類
20.2 嵌套類
第21章 流
21.1 流的操作
21.1.1 緩衝
21.1.2 流和緩衝區
21.1.3 標準輸入輸出對象
21.1.4 重定向
21.1.5 對象代表流
21.2 用cout輸出
21.2.1 重載運算符operator<<
21.2.2 清理緩衝區
21.2.3 有關輸出的相關函式
21.2.4 設定輸出的欄位寬度
21.2.5 設定填充欄位
21.2.6 設定浮點數的顯示精度
21.2.7 輸出末尾的0
21.2.8 設定標誌
21.2.9 setf()函式原型
21.2.10 所有15個標誌以及3個指示標誌
21.2.11 unset()函式
21.2.12 標準控制符
21.2.13 iomanip頭檔案與標準控制符
21.3 用cin輸入
21.3.1 字元串的輸入
21.3.2 字元串的輸入問題
21.3.3 get()函式
21.3.4 帶字元引用參數的get()函式
21.3.5 帶2個參數的get()函式
21.3.6 帶3個參數的get()函式
21.3.7 getline()函式
21.3.8 read()函式
21.3.9 gcount()函式
21.3.10 peek()函式
21.3.11 putback()函式
21.4 檔案的輸入和輸出
21.4.1 輸出數據到檔案
21.4.2 讀取檔案中的數據
21.4.3 讀取空格及空格後面的字元
21.5 多種打開檔案的方式
21.6 檢查檔案是否打開
21.7 二進制檔案和文本檔案
21.7.1 以文本形式輸出到檔案
21.7.2 以二進制形式輸出到檔案
21.8 打開多個檔案
21.9 命令行處理檔案
21.10 使用命令行處理檔案例程
21.11 指定讀取檔案中的數據
21.12 輸出數據到檔案指定位置處
21.13 seekp()和seekg()函式的結合使用
21.14 臨時檔案
21.15 sstream字元串輸入輸出流類
第22章 命名空間
22.1 什麼是命名空間
22.2 創建命名空間
22.2.1 擴充命名空間的內容
22.2.2 儘量在命名空間之外定義函式
22.2.3 命名空間中的成員都是公有的
22.3 使用命名空間
22.4 使用關鍵字using
22.5 為你的命名空間取個別名
22.6 未命名的命名空間
22.6.1 未命名命名空間與全局變數的區別
22.6.2 未命名命名空間與static的區別
22.6.3 未命名命名空間. static與extern的區別
22.7 標準命名空間std
第23章 模板
23.1 什麼是模板
23.2 重載模板
23.3 具體化函式模板
23.3.1 函式模板不能重載
23.3.2 具體化函式模板解決重載問題
23.3.3 具體化函式模板與實例化模板函式
23.4 普通函式. 函式模板與具體化函式模板的優先權
23.4.1 普通函式和函式模板的執行次序
23.4.2 函式模板與具體化函式模板的執行次序
23.4.3 具體化函式模板與普通函式的優先權
23.5 函式模板的匹配
23.6 類模板的定義
23.7 複雜類模板
23.8 數組模板
23.9 對象數組模板
23.10 具有多個參數的模板
23.11 為模板參數提供默認值
23.12 約束模板
23.13 模板成員
23.14 將模板用作參數
23.15 模板和友元
23.15.1 非模板友元類和友元函式
23.15.2 通用模板友元類和友元函式
23.15.3 特定類型模板友元函式
23.16 多餘的臨時對象
23.17 靜態成員和模板
23.18 標準模板庫
23.18.1 容器
23.18.2 順序容器
23.18.3 關聯容器
23.18.4 算法類
23.18.5 總結
第24章 異常和錯誤處理
24.1 異常
24.2 設定多條catch語句
24.3 異常的派生
24.4 創建異常類的成員函式
24.5 異常類的虛函式
24.6 異常類與模板的關係
第25章 補充內容
25.1 預處理過程
25.1.1 預處理指令
25.1.2 #include指令
25.1.3 #define指令
25.1.4 用#define指令替換常量
25.1.5 用#define定義一個特定字元串並對其進行測試
25.1.6 #ifdef. #define和#endif的用途
25.1.7 帶參數的#define
25.1.8 宏與內聯函式
25.1.9 #運算符
25.1.10 ##運算符
25.1.11 #undef指令
25.1.12 #if指令
25.1.13 #endif指令
25.1.14 #if defined指令
25.1.15 #ifdef和#ifndef指令
25.1.16 #elif指令
25.1.17 #error指令
25.1.18 #line指令
25.1.19 #pragma 指令
25.2 預定義的宏
25.3 assert()宏
25.4 嘗試編寫一個簡單的assert()宏
25.5 不能為0的變數
25.6 用宏函式來輸出表達式的值
25.7 調試的級別
25.8 C++類型轉換及運行時類型信息(RTII)
25.8.1 動態類型轉換符
25.8.2 靜態類型轉換
25.8.3 重新解釋類型轉換
25.8.4 常類型轉換
25.8.5 運行時類型信息
25.9 關鍵字volatile
25.10 關鍵字const
25.11 關鍵字mutable
25.12 聯合數據類型union
25.13 聯合數據類型的記憶體占用
25.14 匿名聯合體
25.15 再談指針
25.15.1 指針與數組
25.15.2 指針操作多維數組
25.15.3 指向多維數組的指針作為函式參數
25.15.4 字元串的指針
25.15.5 接受字元串指針的函式
25.15.6 指向字元串的指針變數與字元數組的區別
25.15.7 指向函式的指針
25.15.8 指向函式的指針的用途
25.15.9 指針數組
25.15.10 指向指針的指針
25.16 位運算
25.16.1 按位與“&”運算符
25.16.2 按位或“|”運算符
25.16.3 異或“^”運算符
25.16.4 取反“~”運算符
25.16.5 左移“<<”運算符
25.16.6 右移“>>”運算符
25.16.7 複合位運算符
25.16.8 不同長度數字的位運算
25.16.9 位運算的實例
25.17 位欄位
25.18 區域差異
25.18.1 locale類
25.18.2 默認區域表示或全局區域表示
25.18.3 時間與地理設定
25.18.4 locale與time.h中時間函式的搭配使用
25.18.5 區域表示locale與流的搭配使用
25.18.6 區域表示locale與模板的搭配使用
附錄A ASCII碼對照表
附錄B C++的關鍵字
附錄C C++常用頭檔案列表