2011-12-12 3 views
1

저는 그림 클래스와 그 파생 클래스 인 King, Queen, Rook, Bishop, Pawn 등을가집니다. 체스 필드의 특성을 모델링합니다.기본 클래스에서 파생 된 많은 클래스에 대한 액세스를 부여하는 방법

이제 King, Queen, Rook 등 모든 파생 클래스가 Field 클래스에있는 개인 정보에 액세스해야합니다. 이 문제를 수동으로 클래스 필드에 쓰는 대신 어떻게 만들 수 있습니까? friend class King; friend class Queen; ...?

클래스 필드에 한 번에 모든 클래스에 대한 액세스를 제공 할 수있는 방법이 있습니까?

+6

** 비공개 ** 데이터에 액세스해야하는 이유는 무엇입니까? 관점. – Xeo

+0

나는 필드가 조각을 가질 수 있다고 생각하지만, 조각은 보드의 필드에 접근하면 안된다. – Gianluca

답변

4

파생 된 "Figure"클래스 (King, Queen, Rook 등)가 개인 필드 데이터에 액세스하여 자신을 이동시킬 필요가 있다고 생각합니까?

이상적으로 필자는 Figure 클래스가 일종의 데이터 구조를 사용하여 일종의 데이터 구조를 사용하여 이동 특성을 설명하고 Field가 해당 내부 메서드를 사용하여 해당 내부 개인 데이터를 조작 할 수 있도록해야한다고 생각합니다. . 파생 된 각 클래스는 자신의 이동을 설명하는 올바른 데이터 구조를 반환 할 수 있도록 자체 구현을 제공해야합니다.

친구에게 액세스 권한을 제공해야하는 경우 friend class Figure을 사용해 볼 수도 있고 그림 클래스의 protected 메서드가 해당 데이터를 조작 할 수있는 파생 클래스에서 사용하게 될 것입니다.

2

조각보드에 액세스 할 필요가 없도록 클래스를 리팩토링하십시오.

2

Figure 하위 클래스가 Field 회원에 액세스해야하는 이유를 생각해보십시오. 이동을 수행 할 때 이미 Field이 다른 숫자로 점령되었는지 여부를 확인하기를 원할 수도 있습니다.

이 논리를 Move과 같은 전용 클래스로 옮기는 것이 좋습니다. 예를 들어, Move는 "소스"Field "과"대상 "Field를 개최 할 수있다. 그런 다음 (게임 상태를 수정)를 GameMove을 적용 Game::apply(Move) 방법처럼 soemthing있을 수 있습니다.이 경우 만 Move 일반적인 생각은 모든 Figure 서브 클래스가 처음에 Field에 액세스해야하는 이유를 파악하는 것입니다, 다음에 그 부분을 고려,. 클래스/이건 그냥 예입니다

Field 멤버에 액세스해야 할 수도 있습니다 것 공통 클래스.

관련 문제