2014-02-16 5 views
0

복잡한 데이터 형식에 접근자를 사용해야합니까? 다음은 예입니다.복잡한 데이터 형식에 접근자를 사용해야합니까?

Player 클래스가 있고 그 안에는 Sprite 개체가 있습니다. Sprite 개체에 setPosition() 접근 방법이 있다고 가정 해 보겠습니다. 이제 플레이어를 통해 해당 메서드를 호출하고자하므로 PlayerSprite 개체에 대한 접근자를 만듭니다. 이제

class Player 
{ 
public: 
    const Sprite& getSprite() const; 

private: 
    Sprite sprite; 
} 

내가 어떻게 spritesetPosition을 부릅니까, 이제 나는 '플레이어'개체를 만드는 가정 해 봅시다? 나는 Sprite 참조 getSprite() 메서드를 반환하기 때문에 단지 playerObject.getSprite().setPosition();라고 말할 수 없다. const이다.

sprite 개체가이 개체의 구성원에 대해 보호되어 있다고 생각하면이 상황에서 sprite 개체를 공개해야합니까? 아니면 악습이고 접근자를 사용해야합니까?

+0

[솔리드] (http://en.wikipedia.org/wiki/SOLID_ (object-oriented_design)) 원칙을 고려해야한다. 모듈화 및 코드 유지 관리의 관점에서 볼 때 질문에 대한 대답은 명시 적으로 요구하는 질문과 다를 수 있습니다. 우선, 게임 로직을 프리젠 테이션 (스프라이트 등)과 분리하고, –

답변

0

좋은 대답이 없다 :

차원 포인트 갖는

class Point { 
    public: 
    // Skipping constructors here. 
    int x() const { return m_x; } 
    int x&() { return m_x; } 
    int y() const { return m_y; } 
    int y&() { return m_y; } 

    private: 
    int m_x; 
    int m_y; 
}; 

struct Point { 
    int x; 
    int y; 
}; 

첫 번째는 당신이 내부 데이터를 변경할 수 있습니다 잔인한 비교

에처럼 보인다는 (할 수 있습니다 say)를 std :: vector로 바꾸고 두 번째 데이터 구조는 아무런 변화도 허용하지 않는다. 처음에는 성가신, 나는 그것을 선호한다 (그러나 맛의 문제이다)