首頁 > 後端開發 > C++ > C 中的內部類別如何存取其封閉類別的私有成員?

C 中的內部類別如何存取其封閉類別的私有成員?

Patricia Arquette
發布: 2024-12-08 06:51:14
原創
244 人瀏覽過

How Can Inner Classes in C   Access Private Members of Their Enclosing Class?

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板