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 類別,方便存取節點結構。private,外部無法直接實例化;若需公開請標記 public。static 時,實例需綁定外部類別物件(C++11 起可用 Outer::Inner inner(outerObj);)。善用巢狀類別能提高封裝性與程式碼組織彈性,但請牢記「單向存取」規則,避免設計出循環相依或存取違規的程式碼。