本書立足編程實踐,以Linux或者Windows為開發(fā)平臺,從初學者的角度出發(fā),以面向對象程序設計思想為主線,結合實際項目的開發(fā)需求,將隱藏在面向對象背后的關于C++抽象、封裝、繼承、多態(tài)等機制和知識娓娓道來,用通俗易懂的語言展開講解,不僅讓讀者知其然,更要讓讀者知其所以然,最終讓這些知識再反作用于編程實踐,幫助讀者寫出高質量的C++代碼。全書涉及面向對象的嵌入式軟件開發(fā)的方方面面,具體說來,主要討論包括面向對象語言的特點、MySQL數據庫的應用、QT基礎知識入門及項目開發(fā)過程等多個方面的話題。
周穎穎,女,畢業(yè)于東南大學。多年從事軟件技術的教學工作,獲得多個省級教學獎項;以第一作者公開發(fā)表核心論文1篇,各類教科研論文多篇;主持和參與多項省級和校級教學改革項目、多項科研課題;指導多項省級大學生創(chuàng)新項目,指導學生參加各種省級技能大賽并獲獎。
第1章 面向對象概述 (1)
1.1 C++概述 (1)
1.1.1 C++的發(fā)展 (1)
1.1.2 為什么要學習C++ (2)
1.2 面向過程和面向對象 (2)
第2章 C到C++的擴展 (5)
2.1 命名空間 (5)
2.1.1 什么是命名空間 (5)
2.1.2 命名空間的使用 (6)
2.1.3 命名空間完整示例代碼 (7)
2.1.4 C++標準庫和std命名空間 (8)
2.2 小程序“Hello World” (10)
2.2.1 輸出“Hello World” (10)
2.2.2 C++的輸入和輸出(cin和cout) (10)
2.3 變量定義的位置 (11)
2.4 register關鍵字的變化 (12)
2.5 struct的加強 (13)
2.6 三目運算符的加強 (14)
2.6.1 C與C++中三目運算符的不同 (14)
2.6.2 如何在C語言中實現C++的特性 (14)
2.7 bool類型 (15)
2.8 C/C++中的const (16)
2.8.1 C中的const (16)
2.8.2 C++中的const (17)
2.8.3 const與define (18)
2.9 C++中的引用 (20)
2.9.1 引用的概念與基本使用 (20)
2.9.2 引用作為函數參數 (21)
2.9.3 引用作為函數返回值 (23)
2.9.4 指針引用 (24)
2.9.5 常引用 (26)
2.9.6 引用的本質 (27)
2.10 C++內聯函數 (28)
2.10.1 內聯函數的概念和使用 (28)
2.10.2 內聯函數的特點和使用限制 (29)
2.11 C++函數的默認參數 (29)
2.12 C++函數的占位參數 (30)
2.13 C++中的函數重載 (32)
2.13.1 函數重載的概念 (32)
2.13.2 C++函數重載與函數指針 (34)
2.13.3 函數重載的二義性 (35)
2.13.4 函數重載與const形參 (35)
2.14 C++的動態(tài)內存分配 (37)
2.14.1 new與delete的基本用法 (37)
2.14.2 拓展:多維數組的動態(tài)創(chuàng)建與釋放 (38)
第3章 類和對象 (40)
3.1 面向對象編程介紹 (40)
3.1.1 什么是面向對象 (40)
3.1.2 面向對象的優(yōu)點 (40)
3.1.3 面向對象的特點 (41)
3.1.4 總結 (42)
3.2 類和對象 (43)
3.2.1 類和對象的概念 (43)
3.2.2 類的訪問控制 (45)
3.2.3 類的使用案例 (48)
3.2.4 面向對象編程實例 (49)
3.3 對象的構造和析構 (52)
3.3.1 構造函數 (52)
3.3.2 構造函數的重載和調用 (53)
3.3.3 拷貝構造函數 (56)
3.3.4 默認構造函數 (58)
3.3.5 析構函數 (59)
3.3.6 構造函數的參數初始化列表 (60)
3.3.7 對象的動態(tài)創(chuàng)建和釋放 (63)
3.4 淺拷貝和深拷貝 (64)
3.4.1 淺拷貝問題分析 (64)
3.4.2 深拷貝 (66)
3.5 靜態(tài)成員變量和靜態(tài)成員函數 (67)
3.5.1 靜態(tài)成員變量 (67)
3.5.2 靜態(tài)成員函數 (70)
3.6 C++對象的內存模型 (72)
3.6.1 編譯器對屬性和方法的處理機制 (72)
3.6.2 this指針 (74)
3.6.3 const修飾成員函數 (75)
3.7 友元函數和友元類 (76)
3.7.1 友元函數 (77)
3.7.2 友元類 (80)
3.7.3 友元函數的幾點說明 (82)
第4章 運算符重載 (83)
4.1 概念 (83)
4.1.1 什么是運算符重載 (83)
4.1.2 運算符重載的使用 (84)
4.2 運算符重載的規(guī)則 (89)
4.3 常用的運算符重載 (91)
4.3.1 前置++與后置++的重載 (91)
4.3.2 左移<<與右移>>操作符的重載 (93)
4.3.3 成員函數與友元函數重載的選擇 (97)
4.4 賦值運算符=的重載 (97)
4.5 數組下標運算符[]的重載 (100)
4.6 函數調用運算符()的重載 (103)
4.7 new和delete運算符的重載 (103)
第5章 繼承與派生 (107)
5.1 繼承的概念及語法 (107)
5.1.1 類之間的關系 (108)
5.1.2 繼承關系 (108)
5.1.3 繼承的使用 (108)
5.2 派生類的訪問控制 (110)
5.3 繼承中的對象內存模型 (114)
5.4 派生類的構造函數和析構函數 (115)
5.4.1 派生類的構造函數 (115)
5.4.2 派生類的析構函數 (117)
5.4.3 繼承與組合混搭情況下構造和析構調用原則 (119)
5.5 繼承時的名字遮蔽 (121)
5.6 繼承中的static關鍵字 (123)
5.7 繼承中的類型兼容性原則 (125)
5.8 多繼承 (128)
5.8.1 多繼承的概念 (128)
5.8.2 多繼承中的構造與析構 (129)
5.8.3 多繼承導致的二義性問題 (131)
5.8.4 多繼承時的對象內存模型 (132)
5.9 虛繼承 (135)
5.9.1 虛繼承與虛基類 (135)
5.9.2 虛繼承時的構造函數 (139)
5.9.3 虛繼承時的對象內存模型 (141)
第6章 多態(tài) (143)
6.1 多態(tài)的概念與使用 (143)
6.2 虛函數詳解 (147)
6.3 虛析構函數 (149)
6.4 多態(tài)的實現機制 (153)
6.4.1 多態(tài)原理 (153)
6.4.2 構造函數中調用虛函數能否實現多態(tài) (155)
6.4.3 父類指針操作子類數組 (157)
6.5 多繼承下的多態(tài) (159)
6.6 虛繼承下的多態(tài) (161)
6.7 純虛函數和抽象類 (162)
6.8 typeid運算符 (165)
6.9 靜態(tài)綁定和動態(tài)綁定 (168)
第7章 模板 (171)
7.1 函數模板 (171)
7.1.1 函數模板語法 (171)
7.1.2 函數模板和函數重載 (176)
7.1.3 函數模板機制 (178)
7.2 類模板 (179)
7.2.1 單個類的類模板語法 (179)
7.2.2 繼承中的類模板語法 (182)
7.2.3 類模板的使用 (184)
7.3 類模板中的關鍵字static (191)
第8章 異常 (193)
8.1 什么是異常 (193)
8.2 異常的語法 (194)
8.3 異常類型以及多級catch (195)
8.4 throw詳解 (197)
8.5 標準庫異常 (199)
第9章 輸入/輸出流 (201)
9.1 輸入/輸出流介紹 (201)
9.1.1 輸入/輸出流的理解 (201)
9.1.2 流的理解 (202)
9.1.3 為什么要引用輸入/輸出流 (203)
9.1.4 流的緩沖區(qū) (204)
9.2 標準輸入/輸出流 (205)
9.2.1 標準輸入/輸出流對象 (205)
9.2.2 輸出流的使用 (205)
9.2.3 輸入流的使用 (206)
9.2.4 輸入/輸出格式化 (211)
9.3 文件輸入/輸出流 (215)
9.3.1 文件的打開與關閉 (215)
9.3.2 文件的讀寫 (217)
9.4 字符串流的讀寫 (219)
第10章 標準模板庫STL (222)
10.1 STL概述 (222)
10.1.1 STL基本概念 (222)
10.1.2 容器 (223)
10.1.3 算法 (224)
10.1.4 迭代器 (225)
10.1.5 C++標準庫 (225)
10.2 常用容器 (225)
10.2.1 string (225)
10.2.2 vector容器 (232)
10.2.3 deque容器 (237)
10.2.4 list容器 (240)
10.2.5 map容器 (243)
10.2.6 set容器 (247)
10.3 常用算法 (247)
10.3.1 算法概述 (247)
10.3.2 算法分類 (247)
10.3.3 算法中函數對象和謂詞 (250)
10.3.4 預定義函數對象和謂詞 (255)
10.3.5 函數適配器 (256)
第11章 C++11/14新標準 (259)
11.1 概述 (259)
11.2 實用性加強 (260)
11.2.1 新類型 (260)
11.2.2 統(tǒng)一初始化 (260)
11.2.3 nullptr與constexpr (261)
11.2.4 類型推導 (264)
11.2.5 基于范圍的for循環(huán) (266)
11.2.6 強類型枚舉 (266)
11.2.7 智能指針 (268)
11.2.8 右值引用:移動語義和完美轉發(fā) (275)
11.3 類的加強 (277)
11.3.1 特殊成員函數 (277)
11.3.2 委托構造 (278)
11.3.3 繼承構造 (278)
11.3.4 虛方法管理:override和final (278)
11.3.5 顯示禁用默認函數 (279)
11.4 對模板的加強 (279)
11.4.1 外部模板 (279)
11.4.2 尖括號<> (280)
11.4.3 模板別名using= (280)
11.4.4 默認模板參數 (281)
11.4.5 可變參數模板 (281)
11.5 lambda函數 (282)
11.6 對標準庫的加強 (283)
11.6.1 新增容器 (283)
11.6.2 包裝器 (284)
11.6.3 正則表達式 (285)
11.6.4 并發(fā)編程 (286)
第12章 常用設計模式 (289)
12.1 概述 (289)
12.2 設計模式的基本原則 (289)
12.3 常用設計模式 (290)
12.3.1 單例模式 (290)
12.3.2 簡單工廠模式 (298)
12.3.3 工廠方法模式 (300)
12.3.4 抽象工廠模式 (302)
12.3.5 建造者模式 (305)
12.3.6 代理模式 (308)
12.3.7 裝飾模式 (310)
12.3.8 策略模式 (313)
12.3.9 觀察者模式 (315)
第13章 數據庫基礎 (320)
13.1 數據庫簡介 (320)
13.1.1 MySQL簡介 (320)
13.1.2 關系型數據庫 (321)
13.2 MySQL安裝 (322)
13.2.1 MySQL安裝測試 (323)
13.2.2 MySQL服務開啟與使用 (324)
13.3 MySQL管理 (324)
13.3.1 MySQL用戶設置 (324)
13.3.2 管理MySQL的命令 (327)
13.4 MySQL數據類型 (327)
13.4.1 整型 (327)
13.4.2 浮點型 (328)
13.4.3 定點數 (329)
13.4.4 字符串 (329)
13.4.5 二進制數據 (330)
13.4.6 日期和時間類型 (330)
13.4.7 數據類型的屬性 (331)
13.5 MySQL使用 (332)
13.5.1 登錄MySQL (332)
13.5.2 建庫建表 (333)
13.5.3 數據增刪改查 (334)
13.5.4 刪除整個數據庫 (336)
13.6 MySQL接口使用 (336)
13.6.1 MySQL中文完全參考手冊 (336)
13.6.2 獲取錯誤信息 (337)
13.6.3 連接服務器 (337)
13.6.4 數據查詢 (339)
13.6.5 MySQL的事務處理 (342)
13.6.6 索引 (343)
13.7 MySQL案例 (344)
第14章 Qt入門 (349)
14.1 Qt簡介 (349)
14.1.1 Qt Creator的下載與安裝 (349)
14.1.2 Qt Creator環(huán)境介紹 (350)
14.2 Hello World (352)
14.2.1 編寫Hello World程序 (352)
14.2.2 添加一個按鈕 (356)
14.2.3 Qt的信號和槽機制 (356)
14.2.4 程序的發(fā)布和運行 (357)
14.3 窗口部件 (358)
14.3.1 基礎窗口部件QWidget (359)
14.3.2 對話框Qdialog (360)
14.3.3 其他窗口部件 (363)
14.4 布局管理 (365)
14.4.1 布局管理系統(tǒng) (365)
14.4.2 設置伙伴 (367)
14.4.3 設置Tab鍵順序 (367)
14.5 常用控件介紹 (368)
14.5.1 常用控件需要加載的頭文件 (368)
14.5.2 控件變量定義 (369)
14.5.3 控件初始化 (369)
14.5.4 在垂直布局中加載控件 (369)
14.5.5 常用控件使用 (370)
14.6 文件、目錄和輸入/輸出 (372)
14.6.1 文件和目錄 (372)
14.6.2 文本流和數據流(QDataStream和QtextStream) (374)
14.7 Qt和數據庫 (375)
14.7.1 連接到數據庫 (375)
14.7.2 執(zhí)行SQL語句 (376)
14.8 Qt網絡編程 (376)
14.8.1 Qt和TCP (377)
14.8.2 Qt和UDP (378)
參考文獻 (380)