를 사용하는 방법 중 하나 객체의 방법을 업데이트가 다른 객체의 특성?

StackOverflow https://stackoverflow.com/questions/113033

  •  02-07-2019
  •  | 
  •  

문제

나는 세(C++)클래스:플레이어,핸드와 카드입니다.

선수,회원이 손을 보유하는 손입니다.그것은 또한 방법 getHand(),는 콘텐츠를 반환합니다.

Hand Player::getHand() {
    return hand;
}

손는 방법,addCard(카드 c),는 추가 카드를니다.

나는 이런 일을 하고 싶:

player1.getHand().addCard(c);

하지만 그것은 작동하지 않습니다.그것도 한 가지 오류가,그래서 그것은 무언가를 하세요.하지만 만약 내가 내용을 확인하십시오 player1 의 손으로 그 후,이 카드에 추가되지 않은.

를 얻을 수 있는 방법 이해 작동합니까?

도움이 되었습니까?

해결책

는 경우 getHand()가 반환하지 않는 참 당신이 문제가 될 것입니다.

다른 팁

는 경우 getHand()반환 값 너는 복사본을 수정의 손과하지 않다.

선수이다.addCardToHand()메서드를 무리하지 않는 경우에,당신은 이유가 없다 그렇지 않으면 노출습니다.이것은 아마상에서 몇 가지 방법으로 제공할 수 있습니다 여전히 사본의 손으로 승리를 위해 검사를 비교하고,아무도 수정할 수 있습니다.

당신의 방법을 요구에 대한 포인터를 반환 또는서 참조하는 플레이어의 손 개체입니다.할 수 있습니다 그것처럼"player1.getHand()->addCard(c)".참고는 구문을 사용할 수 있습니다 그것은 그것의 포인터.

에 대한 참조를 반환 손 개체의 예입니다.

Hand &Player::getHand() {
    return hand;
}

지금 당신의 addCard()함수는 운영에 올바른 객체입니다.

는 무엇입의 선언 getHand()?그것은 반환 손으로 새로운 가치,또는 그 반환 손&을 참조하나요?

으로 명시 된,당신은 아마 수정을 복사본을 대신 원본입니다.

이를 방지하기 위해 종류의 실수할 수 있습 명시적으로 선언 복사본을 생성자와 같으로 운영자에게 개인이다.

  private:
    Hand(const Hand& rhs);
    Hand& operator=(const Hand& rhs);

getX()은 자주 이름의자 접근 기능을 위한 구성원 x,당신의 자신의 유사한 사용합니다.그러나,"getX"접근은 또한 매우 자주 읽기 전용수 함수,그래서 그것은 놀라운 일이 있을 수 있습니다 다른 상황에서 당신의 코드 기반을 볼 수를 호출하"getX"수정하는 X

는 것이 좋습니다 것입니다 그래서 대신 사용하여 참조는 반환 값으로 실제로 코드를 수정을 디자인 비트입니다.몇몇 대안:

  • 노출 getMutableHand 방법는 포인터를 반환합니다(또는 참조).반환하여 포인터,당신은 강을 제안 호출자가 포인터를 사용하여 표기법,그래서 그 사람이 읽기 코드가 이 변수 값을 변경하지 않 읽기 전용입니다.
  • 선수 서브 클래스의 손, 는 아무거나 조작하는 손 또한 작품에 직접 플레이어입니다.직관적으로,당신이 말할 수 있는 선수하지 않은 손으로,그러나 기능적으로 그들은 권리의 관계는 모든 선수는 정확하게 한 손으로 그것을보십시할 수 있는 동일한 액세스를 손을 통해 플레이어로 직접 있습니다.
  • 이 직접 구현할 addCard 방법 플레이어 클래스입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top