首頁 >後端開發 >C++ >C 中的內部類別可以存取其外部類別的私有成員嗎?

C 中的內部類別可以存取其外部類別的私有成員嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-27 13:36:13489瀏覽

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

內部類別可以存取私有變數嗎?

在此程式碼範例中,內部類別 Inner 是在外部類別 Outer 中定義的。當建立 Inner 的實例時,它應該能夠存取 Outer 類別的私有成員變數 var。但編譯時出現錯誤,提示 Inner 沒有名為 var 的成員。

內部類別和成員存取

C 中的內部類別被認為是友元其外部類別。作為友元,內部類別可以存取外部類別的所有成員,包括私有成員。因此,Inner 的實例應該能夠存取 Outer 的私有變數 var。

問題與解決方案

錯誤源於之間缺乏聯繫內部實例和外部實例。在Java中,內部類別與其封閉類別之間存在隱含的父子關係。但是,在 C 中,必須明確定義這種關係。

要解決此問題,必須將對外部類別的參考傳遞給內部類別的建構子。這為內部類別提供了存取外部類別成員所需的上下文。

以下是一個範例,示範如何建立父子連結並允許Inner 存取Outer 的私有變數var:

#include <string>
#include <iostream>

class Outer {
public:
    class Inner {
    public:
        Inner(Outer& x): parent(x) {}  // Pass a reference to the outer class

        void func() {
            std::string a = "myconst1";
            std::cout << parent.var << std::endl;

            if (a == Outer::MYCONST)
                std::cout << "string same" << std::endl;
            else
                std::cout << "string not same" << std::endl;
        }

    private:
        Outer& parent;
    };

    public:
        Outer(): i(*this), var(4) {}
        Outer(Outer& other): i(other), var(22) {}
        void func() {
            i.func();
        }

    private:
        static const char* const MYCONST;
        Inner i;
        int var;
};

const char* const Outer::MYCONST = "myconst";

int main() {
    Outer o1;
    Outer o2(o1);
    o1.func();
    o2.func();

    return 0;
}

修改後的程式碼允許Inner 存取var,因為Inner 的建構子在Inner 和創建的Outer 實例之間建立了父子關係它。

以上是C 中的內部類別可以存取其外部類別的私有成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn