在 C 中存取私有變數的內部類別
在 C 中,內部類別具有存取封閉類別的私有成員的獨特能力。考慮以下範例:
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; };
在此範例中,內部類別是在外部類別中定義的。根據傳統的作用域規則,Outer 的 var 成員變數不應該被 Inner 存取。然而,在 C 中,內部類別本質上是其封閉類別的友元。
因此,Outer::Inner 類型的物件可以存取 Outer 的私有成員變數。不過要注意的是,這種存取權限只能在內部類別的範圍內授予。
為了進一步說明這個概念,我們將內部類別的func() 方法修改如下:
void Outer::Inner::func() { var = 1; }
現在,如果我們嘗試編譯此程式碼,我們將遇到錯誤訊息,指示“class Outer::Inner”沒有名為“var”的成員。這是因為雖然內部類別可以存取私有成員,但它們不會繼承與封閉類別的成員關係。
要在內部類別中建立正確的成員關係,我們需要手動建立對封閉類,如下例所示:
class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::cout << parent.var << std::endl; } private: Outer& parent; }; public: Outer() : i(*this), var(4) {} void func() { i.func(); } private: Inner i; int var; }; int main() { Outer o; o.func(); }
在此範例中,內部類別建構函式將對外部類別的引用作為參數。這允許 Outer::Inner 類型的物件透過父引用存取 Outer 的私有成員。
以上是C 中的內部類別如何存取其封閉類別的私有成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!