三大支柱:封裝、繼承、多態
- 封裝:數據與操作綁定,
private 隱藏細節,public 暴露介面。
- 繼承:
class Derived : public Base 實現 is-a 關係,復用代碼並支援多態。
- 多態:虛函數 + 基類指針/引用,實現運行期動態綁定。
結構體 vs 類
| 特性 | struct | class |
| 默認訪問權限 | public | private |
| 默認繼承權限 | public | private |
| 語義慣例 | 純數據聚合 (POD) | 封裝行為與數據 |
成員訪問與 this 指針
- 成員函數中同名參數會遮蔽成員變量,需用
this->member 訪問成員。
this 為 Class* const,指向調用對象,隱式傳遞給每個非靜態成員函數。
繼承細節
構造/析構順序
Base() → Member() → Derived() // 構造
~Derived() → ~Member() → ~Base() // 析構
多重繼承與虛繼承
- 多重繼承:按聲明順序構造基類。
- 菱形繼承需
virtual 繼承,避免基類子對象重複;虛基類由最底層派生類直接構造。
多態關鍵點
virtual 函數表 (vtable) + vptr 實現動態分派。
dynamic_cast:運行期類型安全轉換,需 RTTI 支援,基類須有虛函數。
typeid:返回 type_info,支援類型比較與名稱查詢。
- 純虛函數
=0 定義介面,構成抽象類。
- 虛析構函數:基類指針刪除派生類對象必須虛析構,否則資源洩漏。
引用
- 引用是變量別名,聲明時必須初始化,綁定後不可改變綁定對象。
- 函數參數/返回值用引用避免拷貝,
const T& 接受臨時對象。
- 本質為指針常量,編譯器自動處理取址/解引用。
異常處理
try {
// 可能拋出
throw MyException("error");
} catch (const MyException& e) {
// 處理
} catch (...) {
// 捕獲所有其他異常
}
throw 拋出任意類型,catch 按類型匹配(派生類 catch 應置於基類前)。
- 異常傳播:若當前作用域無匹配 catch,展開堆疊至上層調用者。
- 函數異常規範
throw(TypeList) (C++11 棄用,改用 noexcept)。
- 標準異常繼承自
std::exception,重寫 what()。
I/O 流
iostream 家族:istream/ostream → ifstream/ofstream/fstream、istringstream/ostringstream。
- 格式化控制:
setf/unsetf、操縱子 hex/dec/oct、setw/setfill/setprecision。
- 文件流:
open(mode)、read/write 二進制、seekg/seekp 定位。
- 上一篇文章: C++ 動態鏈接庫 (DLL) 創建與使用完整教程:Visual Studio 實戰
- 下一篇文章: C++ STL 算法精要(13):查找算法全解析與實戰範例
Copyright ©
程式碼之家 All Rights Reserved