2016-06-14 3 views
0

나는 이것이 쉬워야한다고 느낀다. 그러나 나는 여전히 제대로 작동 할 수 없다.상위 클래스 변수에 액세스

여기 모범 사례가 무엇인지 모르겠습니다. 먼저, 참조로 자식 클래스에 전달 된 변수를 저장하고 자식 클래스 내에서 호출하는 방법으로 시작했습니다. 부모 클래스 내에서 변수가 변경되면 자식은 변경 사항을 보지 못합니다.

아이 :

class Child 
{ 
public: 
    Child(bool &EndLoop); 
    ~Child(); 

private: 
    bool EndLoopRef; 
}; 

Child::Child (bool &EndLoop) : EndLoopRef(EndLoop) 
{ 
} 

Child::PrimaryFunction() 
{ 
    while (!Child::EndLoopRef) 
    { 
     // Main app function is in here 
    } 

    // EndLoop is true, we can now leave this method 
} 

부모 :

class Parent 
{ 
public: 
    Parent(); 
    ~Parent(); 

private: 
    bool EndLoop; 
}; 

Parent::Parent() 
{ 
    Child childclass(EndLoop); 
    childclass.PrimaryFunction(); 

    // EndLoop was changed and the loop is now overe 
} 

이를 요약하려면, 부모 클래스는 참조로 EndLoop 전달합니다. 자식 클래스는이 참조를 저장하고 EndLoopRef의 실제 값이 루프를 종료 할 때까지 기다립니다. 말할 필요도없이 루프를 종료하지 않습니다.

참고로, EndLoop 값은 상위 클래스의 시스템 호출에 의해 변경됩니다.

+0

개인 부분은 직접적인 종류에서만 접근 가능하다; 친척이 아닌. 자식이 액세스 할 수있는 기본 클래스의 * protected * 변수가 있습니다. 먼저 자녀가 당신의 부분에 간섭 받기를 원한다면 먼저 생각하십시오. –

+0

또한 부모는 컴파일 시간에 자녀 수 또는 이름 (또는 부품)이 얼마나 될지 모르기 때문에 부모가 하위 파트를 망칠 수 없습니다. –

+0

Child 클래스의 EndLoopRef 변수가 참조가 아닙니다. 당신이 그것을 참조한다면. 하위 클래스는 변수의 범위를 제어하지 않으므로주의해야 할 수 있습니다. 하위 클래스가이를 사용하여 제어 클래스가 범위를 벗어나면 문제가 발생할 수 있습니다. – Dan

답변

3

클래스 회원 이름을 bool EndLoopRef;으로 지정해도 참조가되지 않습니다. 이것은 여전히 ​​bool 값이며 생성자의 멤버 초기화는 구성시 EndLoop의 값을로드합니다.

&을 사용하여 참조를 정의하는 방법을 이미 알게되었습니다.

+0

감사합니다. 왜 나는 그것을 정규 값으로 정의했는지 모르겠다. 그 점을 지적 해 주셔서 감사합니다. – user0000001

-3

개인 변수는 참조로 전달하면 안됩니다. 개인과 상호 작용하는 가장 좋은 방법은 멤버 변수가있는 클래스에서 get() 및 set() 메서드를 사용하는 것입니다. 이 경우 부모 값은 부울 값을 반환하는 getEndLoop() 함수를 제공 할 수 있습니다.

Child::PrimaryFunction() 
{ 
    while (!Parent.getEndLoop()) 
    { 
     // Main app function is in here 
    } 

    // EndLoop is true, we can now leave this method 
} 
+0

왜 그런가요? private 변수를 참조로 전달하는 것은 잘못된 것이 아닙니다. – SergeyA

1

참조를 정의하지 않았습니다. 너는 말해야한다 :

bool &EndLoopRef; 
관련 문제