本文匯總 C++ 面試高頻考點,涵蓋類與對象、構造/析構/拷貝/賦值、const 語義、靜態成員、繼承與多態、模板、STL 容器分類等,適合快速複習與查漏補缺。
const 成員、引用成員、無預設構造函數的類類型成員。~ClassName(),無參、無返回值、有 this 指針、不可重載、一個類只能有一個。delete,否則記憶體洩漏。ClassName(const ClassName&)(必須為引用,否則無限遞歸)。T t2(t1); 或 T t2 = t1;);t2 = t1;),不同於拷貝構造(新對象)。if (this == &rhs) return *this;);delete[] ptr;);*this 支援鏈式賦值。void func() const; —— 函數體內不可修改非 mutable 成員。const T obj;)只能調用 const 成員函數(構造/析構除外)。get、print 等唯讀操作,提升程式健壯性。| 項目 | 靜態數據成員 | 靜態成員函數 |
|---|---|---|
| 儲存位置 | 全域/靜態存儲區,全類共享一份 | 代碼區,屬於類不屬於對象 |
| 初始化 | 類外定義並初始化:int Class::var = 0; | 類內聲明 static,類外定義無需 static |
| 存取方式 | Class::var 或 obj.var | Class::func() 或 obj.func() |
| 可訪問 | — | 僅能訪問靜態成員(無 this 指針) |
| 方式 | 父類 public → | 父類 protected → | 父類 private → |
|---|---|---|---|
| public | public | protected | 不可訪問 |
| protected | protected | protected | 不可訪問 |
| private | private | private | 不可訪問 |
virtual 關鍵字聲明虛函數;構造函數、靜態成員函數、內聯函數不能為虛函數。vptr 指向類的 vtable,表中存虛函數地址。virtual void func() = 0;(僅聲明無定義)。若父類析構非虛,delete 父類指針(實指子類對象)僅調用父類析構,子類資源洩漏。凡有虛函數,析構必須虛。
class B : virtual public A),孫子類構造函數直接調用虛基類構造函數,確保只有一份虛基類副本。static_cast:編譯期靜態轉型,不檢查運行期類型,轉型不保證安全。dynamic_cast:運行期動態轉型(需 RTTI),轉型失敗返回 nullptr(指針)或拋出異常(引用),安全。| 分類 | 容器 | 存取方式 | 底層結構 |
|---|---|---|---|
| 順序容器 | vector | 隨機存取(下標) | 動態數組 |
| deque | 隨機存取 | 分段連續數組 | |
| list | 順序存取 | 雙向鏈表 | |
| 關聯容器 | set/multiset | 按鍵值存取 | 紅黑樹 |
| map/multimap | 按 Key 存取 | 紅黑樹 | |
| 容器適配器 | stack | 僅棧頂 | deque |
| queue | 僅隊頭/隊尾 | deque | |
| priority_queue | 僅最高優先級 | vector (堆) |
核心差異:順序容器按插入位置存儲,關聯容器按鍵值排序;順序容器通過位置存取,關聯容器通過鍵存取。
空類會隱式獲得:預設構造函數、拷貝構造函數、析構函數、賦值運算符重載、取址運算符重載(const 與非 const 版本)。