2016-06-28 3 views
3

다음 문장을 읽었습니다. 사실인지 잘 모르겠습니다. 예를 들어 설명해주십시오.자녀의 보호 된 변수에 액세스하는 방법

자식은 기본 클래스 의 동일한 멤버 변수에 동일한 액세스 권한을 갖습니다.

그래도 난이 문제는 아이

class A 
    { 
    private: 
     class B* myBclass; 
    protected: 
     int bc; 
    } 

    class ChildofA : public A 
    { 
     public: 
     childofA() {}; 
    } 

    class B 
    { 
     public : 
     B() {}; 
     virtual void fun1(A* anA); 
    } 


    class childofB : public B 
    { 
     public : 
     void fun1(A* anA) 
      { 
       anA.bc=1; << Problem here 
      } 

    } 

위의 코드가 변수 BC가 보호된다는 사실에 대해 불평의 보호 변수에 액세스하는 방법입니다. ChildofB에서 fun1()을 사용하여 Child 클래스 Child 클래스의 인스턴스에 대한 bc 변수를 검색하고 싶습니다. 이 문제를 어떻게 해결할 것인가? (친구와 getter/setter없이).

+2

나는 그렇게 생각하지 않는다. 정의에 따라 보호 된 구성원은 설정자 또는 친구 메소드가 필요합니다. 당신은 단순히 보호 된 멤버에 액세스하려고 시도하고 있으며 상속은이 방정식에서는 중요하지 않습니다. – goelakash

+0

클래스 외부에서 접근하려면'bc'를'protected'로 선언해야하는 이유는 무엇입니까? –

+0

기술적으로 (그러나 이것을하지 마십시오 !!) 클래스 A의 friend 클래스 (메소드는 아님)를 childofB 클래스로 선언 할 수 있습니다. 대신 인터페이스를 재 작업하십시오. – T33C

답변

3

A으로 신고되었지만 childOfAbc에 액세스 할 수 있습니다. 자식은 모든 public 및 protected 인스턴스 변수에 액세스 할 수 있습니다. 보호 수단은 "사적인 것이지 내게는 내 자손에 대한 것이 라기보다는 내 개인에게"이다.

상속은 B 계층에 A 계층의 사물 저장소를 볼 수있는 기능을 제공하지 않습니다. 실제로 가난한 스타일 일지라도 friend을 선언하거나 bc을 다른 클래스에서 액세스 할 수 있도록하려면 공개로 설정해야합니다.

관련 문제