接續上篇,深入探討 class 定義中的進階特性:
static 數據成員:屬於類而非對象,需在類外定義初始化(int Class::member = 0;),可被 const static 整型常量在類內初始化。static 成員函數:無 this 指針,僅能訪問靜態成員,可用 Class::func() 或對象調用。friend 函數/類:打破封裝,獲得私有/保護成員訪問權。友元關係不可傳遞、不可繼承、單向。operator<<)、需訪問多個類內部的協作函數。類內定義的類,外層類對內層類無特殊訪問權(C++11 前),內層類對外層類也無特殊權限。主要作用:邏輯封裝、命名空間管理。
typedef / using 在類內定義類型別名,模板類成員定義需加 template<...> 前綴並在類外定義(除非內聯)。
結構體末尾宣告 int arr[]; 或 int arr[0]; 配合動態分配 malloc(sizeof(Struct) + n*sizeof(int)) 實現變長結構,C++ 建議用 vector 或 string 替代。
private,提供 const 獲取器。explicit 防止隱式轉換,delete 禁用不需要的操作。