2012-04-21 3 views
4

기본 클래스의 보호 된 멤버가 파생 클래스에서 액세스 할 수없는 이유는 무엇입니까?파생 된 클래스에서 보호 된 멤버에 액세스 할 수 없습니다.

class ClassA 
{ 
public: 
    int publicmemberA; 

protected: 
    int protectedmemberA; 

private: 
    int privatememberA; 

    ClassA(); 
}; 

class ClassB : public ClassA 
{ 
}; 

int main() 
{ 
    ClassB b; 
    b.protectedmemberA; // this says it is not accesible, violation? 
    //..... 
} 

답변

9

당신은b 내부 protectedmemberA에 액세스 할 수 있습니다. 외부에서 액세스하려고합니다. 상속과는 아무런 관련이 없습니다.

이 다음과 같은 이유로 발생 : 당신은 예를 들어 여기에 액세스 할 수 있도록 보호 된 멤버는 클래스 B의 범위 내부 만 볼 수 있기 때문에

class B 
{ 
protected: 
    int x; 
}; 

//... 

B b; 
b.x = 0; //also illegal 
3

:

class ClassB : public ClassA 
{ 
    void foo() { std::cout << protectedMember;} 
}; 

하지만 식 등

someInstance.someMember; 

은 (는) someMember이 (가) 공개되어야합니다.

일부 관련 질문은 herehere입니다. 당신은 B (또는 A)의 범위 내에서 protectedmemberA에 액세스 할 수 있습니다

+0

TNX 후안 내에서 액세스 할 수있는 보호 수정이 선호되는 좋은 상황을 시도하고? 여전히 캔트는 그 중요성을 얻는다 : ( – WantIt

+0

보호 된 멤버 변수를 사용하는 좋은 이유를 생각할 수 없다. 파생 된 클래스가 일부 기본 클래스 기능을 사용하도록 허용 할 때 해당 기능을 공개하지 않을 때 보호 된 함수를 사용하는 것을 보았다. 나는 네가하는 일을 정말로 아는 경우에만 그것을 사용하라. – juanchopanza

0

- 당신은 main()