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 중국어 웹사이트의 기타 관련 기사를 참조하세요!