>백엔드 개발 >C++ >내부 클래스가 C의 외부 클래스 전용 변수에 액세스할 수 있습니까?

내부 클래스가 C의 외부 클래스 전용 변수에 액세스할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-28 21:31:14967검색

Can Inner Classes Access Outer Class Private Variables in C  ?

내부 클래스가 개인 변수에 액세스할 수 있나요?

다음 C 코드를 고려하세요.

class Outer {
    class Inner {
    public:
        Inner() {}
        void func();
    };

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

void Outer::Inner::func() {
    var = 1;
}

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

컴파일 시 이 코드는 코드에서 "class Outer::Inner'에는 var'라는 멤버가 없습니다."라는 오류가 발생합니다. 내부 클래스가 외부 클래스의 전용 변수에 액세스할 수 있습니까?

답변:

예, 내부 클래스는 바깥쪽 클래스의 전용 변수에 액세스할 수 있습니다. . 이는 내부 클래스가 포함 클래스의 친구이기 때문입니다.

그러나 Java와 달리 내부 클래스 객체와 포함 클래스 객체 사이에는 직접적인 관계가 없습니다. 이 연결을 설정하려면 수동으로 설정해야 합니다.

해결책:

다음 수정 코드는 외부 클래스에 대한 참조를 전달하여 내부 클래스 개체와 외부 클래스 개체를 연결합니다. 내부 클래스 생성자:

#include <string>
#include <iostream>

class Outer
{
    class Inner
    {
        public:
            Inner(Outer&amp; x): parent(x) {}
            void func()
            {
                std::string a = "myconst1";
                std::cout << parent.var << std::endl;

                if (a == MYCONST)
                {   std::cout << "string same" << std::endl;
                }
                else
                {   std::cout << "string not same" << std::endl;
                }
            }
        private:
            Outer&amp;  parent;
    };

    public:
        Outer()
            :i(*this)
            ,var(4)
        {}
        Outer(Outer&amp; 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();
}

이 코드는 컴파일 오류를 제거하고 내부 클래스가 외부 클래스의 전용 변수에 액세스할 수 있도록 허용합니다. 수업.

위 내용은 내부 클래스가 C의 외부 클래스 전용 변수에 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.