若類 B 的聲明在類 A 之後,可在 A 中聲明 friend class B;,並在 B 的方法中訪問 A 的私有成員。反之,若需在 A 的方法中使用 B 的成員,則 B 的完整定義必須在 A 的方法定義之前可見。
class Tv { friend class Remote; public: void buzz(Remote& r); };
class Remote { friend class Tv; public: bool volup(Tv& t) { t.volup(); } };
inline void Tv::buzz(Remote& r) { ... } // 需在 Remote 定義後
需訪問兩個類私有數據的函數,可作為兩個類的共同友元,提供更靈活的接口。
在類中聲明的類稱為嵌套類,提供新的類型作用域,避免名稱衝突。訪問權限遵循外層類的 public/protected/private:
class Queue {
struct Node { Item item; Node* next; }; // 私有嵌套結構
};
三大組成部分:
throw 語句,實際是跳轉,攜帶異常特徵值。catch 關鍵字,匹配異常類型。異常機制為處理不合適的值、I/O 失敗等提供靈活方式,引發異常將終止當前函數,控制權轉給匹配的 catch。
僅適用於含虛函數的類。三大支撐元素:
dynamic_cast:安全地將基類指針轉換為派生類指針,失敗返回 nullptr。typeid:返回對象類型信息(type_info 對象)。type_info 結構:存儲特定類型信息。典型用法:dynamic_cast<Type*>(pt) 若 *pt 為 Type 或其派生類則轉換成功,否則為空指針。
static_cast:編譯期靜態轉換(如數值轉換、指針上下行轉換)。const_cast:移除/添加 const/volatile 資格。reinterpret_cast:低級位模式重新解釋,極度危險。