2010-08-16 4 views
0

멤버 변수의 메서드가 같은 클래스 내의 다른 private 멤버 변수에 액세스 할 수 있습니까? 나는 functor 멤버 변수를 염두에두고있다.다른 멤버 변수의 메서드 내에서 멤버 변수의 프라이버시

개인 멤버 변수에 대한 포인터를 클래스 외부에서 참조 해제하고 할당 할 수 있습니까? 다른 멤버 변수의 메소드는 어떻습니까?

아마 대답은 더

내가 제대로 질문을 이해 적어도 경우
class A 
{ 
someClass a,b; 

A(){a(&b);} 
} 

답변

1

멤버 변수의 메서드를 호출 할 때마다 해당 클래스의 형식이 정의 된 클래스가 아니면 private 멤버 변수에 액세스 할 수 없습니다.

멤버 변수에 대한 포인터에 (어떤 식 으로든) 액세스 권한을 부여하면 "const"가 아니라는 예고없이 역 참조 할 수 있습니다. 다른 멤버 변수의 메서드에서도 동일한 어설 션이 적용됩니다.

질문을 수정 한 후 :
예제에서 (멤버 변수 "a"를 통해) 메서드를 호출하여 private 멤버 변수 "b"에 대한 포인터를 제공합니다. 당신은 완벽하게 올바른 C++ 인 A에서이 두 개의 private 멤버 변수에 접근하고 있습니다.

1

같은 없습니다. 예를 들어, 다음과 같은 코드 :

class outer { 
    class inner { 
     int x; 
    }; 

    void use_x() { inner::x = 0; } 
}; 

... 컴파일되지 않습니다. innerouter 안에 중첩되어 있다는 사실은 이 아니며의 멤버 함수는 outer의 멤버 함수에 inner의 특수 액세스를 제공합니다.

편집 : 편집 후, 나는 전혀 이상한 아무것도 표시되지 않습니다 - A()는 (분명히)는 또한 개인 회원들에게 ab을 포함 class A의 회원. private의 정의는 클래스 내부의 코드에는 액세스 할 수 (즉, 이름이 표시됨) 있지만 클래스 외부에는 코딩 할 수 없다는 것입니다. A()은 클래스 내부에 있으므로 ab을 볼 수 있습니다.

+0

그건 내가 의미하는 바가 아니지만 흥미로운 점입니다. 내 편집을 참조하십시오. – user383352

관련 문제