> 백엔드 개발 > 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;
};
로그인 후 복사

이 예에서 Inner 클래스는 Outer 클래스 내에 정의됩니다. 전통적인 범위 규칙에 따르면 Outer의 var 멤버 변수는 Inner에서 액세스할 수 없어야 합니다. 그러나 C에서 내부 클래스는 본질적으로 바깥쪽 클래스와 친구입니다.

결과적으로 Outer::Inner 유형의 객체는 Outer의 비공개 멤버 변수에 액세스할 수 있습니다. 그러나 이 액세스는 내부 클래스의 범위 내에서만 허용된다는 점에 유의하는 것이 중요합니다.

이 개념을 더 자세히 설명하기 위해 Inner 클래스의 func() 메서드를 다음과 같이 수정해 보겠습니다.

void Outer::Inner::func() {
    var = 1;
}
로그인 후 복사

이제 이 코드를 컴파일하려고 하면 'class Outer::Inner'에 'var'이라는 멤버가 없다는 오류 메시지가 나타납니다. 이는 내부 클래스가 private 멤버에 액세스할 수 있지만 바깥쪽 클래스와의 멤버 관계를 상속하지 않기 때문입니다.

내부 클래스 내에서 적절한 멤버 관계를 설정하려면 해당 클래스에 대한 참조를 수동으로 생성해야 합니다. 다음 예제와 같이 바깥쪽 클래스를 포함합니다.

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();
}
로그인 후 복사

이 예제에서 Inner 클래스 생성자는 Outer 클래스에 대한 참조를 인수로 사용합니다. 이를 통해 Outer::Inner 유형의 객체가 상위 참조를 통해 Outer의 전용 멤버에 액세스할 수 있습니다.

위 내용은 C의 내부 클래스는 자신을 포함하는 클래스의 비공개 멤버에 어떻게 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿