首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

《C++ Primer Plus》第15章學習筆記:友元、異常、RTTI

     編輯:C++ 入門

第15章 友元、異常和其他

1. 友元類與友元成員函數

若類 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 定義後

2. 共同友元

需訪問兩個類私有數據的函數,可作為兩個類的共同友元,提供更靈活的接口。

3. 嵌套類

在類中聲明的類稱為嵌套類,提供新的類型作用域,避免名稱衝突。訪問權限遵循外層類的 public/protected/private:

  • 私有嵌套類:僅外層類可用,派生類與外部不可用。
  • 保護嵌套類:外層類與派生類可用,外部不可用。
  • 公有嵌套類:皆可用。
class Queue {
    struct Node { Item item; Node* next; }; // 私有嵌套結構
};

4. 異常處理

三大組成部分:

  1. 引發異常:throw 語句,實際是跳轉,攜帶異常特徵值。
  2. 捕獲異常:catch 關鍵字,匹配異常類型。
  3. try 塊:標識可能拋出異常的代碼區域,後跟一或多個 catch 塊。

異常機制為處理不合適的值、I/O 失敗等提供靈活方式,引發異常將終止當前函數,控制權轉給匹配的 catch。

5. RTTI(運行階段類型識別)

僅適用於含虛函數的類。三大支撐元素:

  • dynamic_cast:安全地將基類指針轉換為派生類指針,失敗返回 nullptr。
  • typeid:返回對象類型信息(type_info 對象)。
  • type_info 結構:存儲特定類型信息。

典型用法:dynamic_cast<Type*>(pt) 若 *pt 為 Type 或其派生類則轉換成功,否則為空指針。

6. 類型轉換運算符

  • static_cast:編譯期靜態轉換(如數值轉換、指針上下行轉換)。
  • const_cast:移除/添加 const/volatile 資格。
  • reinterpret_cast:低級位模式重新解釋,極度危險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved