2013-09-29 3 views
0

내가 클래스 B의 bFunction() 안에이 작업을 수행 할 수있는이는 C의 구성원 개체 ++에 대한 보호 메소드를 호출

class A { 
    ... 
    protected: 
     B* test; 
     aFunction(); 
}; 

class B { 
    ... 
    protected: 
     A* test1; 

    public: 
     bFunction(); 
}; 

같은 예를 들어 두 개의 클래스가있는 경우 : 기본적으로

bFunction(){ 
    test1->aFunction(); 
} 

, 수 그 함수에서 파생되지 않은 클래스의 특정 클래스의 보호 된 함수를 호출합니까? cplusplus.com에서

+4

왜 보지 않으시겠습니까? – P0W

+4

단 하나의 대답 : 아니오. –

답변

4

protected의 "지점"은 기본 클래스에서 파생 된 클래스 만 해당 기능을 호출 할 수 있다는 것입니다.

이렇게해야 할만한 이유가있는 경우 클래스를 friend으로 설정하십시오. class A 안에 friend class B;을 추가하십시오.

1

: 클래스의

개인 및 보호 된 멤버는 선언 된 동일 클래스 외부 에서 액세스 할 수 없습니다. 그러나이 규칙은 친구에게 영향을 미치지 않습니다.

당신은 보호하고 호출 할 수있는 사람들은 다른 클래스에서 privat의 방법 '친구'가 될 것입니다 귀하의 경우

:

Class A { 
    ... 
    protected: 
     B* test; 
     aFunction(); 
    friend class B; 
} 

종종 그 생각된다 나쁜 연습을하지만, 단단히 결합 된 클래스는 괜찮습니다.

2

이러한 상호 종속성을 피하는 것이 좋습니다. 친구 기능을 사용할 필요성은 종종 잘못된 아키텍처를 나타냅니다.