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

C++ Primer 學習筆記:類與數據抽象——類的定義與聲明(下)

     編輯:C++ 入門

類定義的完整語法與細節

接續上篇,深入探討 class 定義中的進階特性:

1. 靜態成員

  • static 數據成員:屬於類而非對象,需在類外定義初始化(int Class::member = 0;),可被 const static 整型常量在類內初始化。
  • static 成員函數:無 this 指針,僅能訪問靜態成員,可用 Class::func() 或對象調用。

2. 友元機制

  • friend 函數/類:打破封裝,獲得私有/保護成員訪問權。友元關係不可傳遞、不可繼承、單向。
  • 常見用法:運算符重載(operator<<)、需訪問多個類內部的協作函數。

3. 巢狀類別

類內定義的類,外層類對內層類無特殊訪問權(C++11 前),內層類對外層類也無特殊權限。主要作用:邏輯封裝、命名空間管理。

4. 類作用域與名稱查找

  • 類定義分兩階段:先編譯成員聲明(構成類作用域),再編譯成員函數體(此時可見整個類)。
  • 成員函數體內名稱優先查找:局部 → 類作用域 → 外層作用域。

5. 類型別名與模板類

typedef / using 在類內定義類型別名,模板類成員定義需加 template<...> 前綴並在類外定義(除非內聯)。

6. 彈性數組成員 (C99/C++11 非標準擴展)

結構體末尾宣告 int arr[]; 或 int arr[0]; 配合動態分配 malloc(sizeof(Struct) + n*sizeof(int)) 實現變長結構,C++ 建議用 vector 或 string 替代。

最佳實踐總結

  1. 數據成員盡量 private,提供 const 獲取器。
  2. 單一職責:類只封裝一組緊密相關的數據與操作。
  3. 優先使用組合而非繼承;繼承必須滿足「是一種」關係。
  4. 遵循法則三/五/零:管理資源的類顯式聲明拷買/移動/析構。
  5. 善用 explicit 防止隱式轉換,delete 禁用不需要的操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved