首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 巢狀類別完全指南:內部類別可存取外部私有成員

     編輯:程式設計綜合問答

核心結論

C++ 完全允許在類別內部定義另一個類別(巢狀類別 / Nested Class)。 這項特性常用於封裝輔助結構、實作迭代器或隱藏實作細節。

關鍵存取規則

✅ 內部類別 可直接存取 外部類別 的 private / protected 成員(含靜態與非靜態)。
❌ 外部類別 無法 直接存取 內部類別 的 private / protected 成員。

程式碼範例

class Outer {
private:
    int secret = 42;
    static int shared;

    class Inner {
    public:
        void reveal(Outer& o) {
            // 合法:內部類別存取外部 private 成員
            std::cout << "Outer::secret = " << o.secret << '\n';
            std::cout << "Outer::shared = " << Outer::shared << '\n';
        }
    };
};

// 外部類別若需存取 Inner::private 需透過友元或公開介面

常見應用場景

  • 迭代器實作: 容器類別內部定義 iterator 類別,方便存取節點結構。
  • Pimpl 慣用語: 將實作細節封裝於內部類別,減少編譯相依。
  • 狀態機/策略模式: 將各狀態/策略定義為內部類別,僅對外公開基類介面。

注意事項

  1. 內部類別預設為 private,外部無法直接實例化;若需公開請標記 public。
  2. 內部類別非 static 時,實例需綁定外部類別物件(C++11 起可用 Outer::Inner inner(outerObj);)。
  3. 若內部類別需存取外部非靜態成員,必須持有外部物件參考或指標。

善用巢狀類別能提高封裝性與程式碼組織彈性,但請牢記「單向存取」規則,避免設計出循環相依或存取違規的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved