"클래스 갑판"과 "클래스 카드 : 공개 갑판"의 두 클래스를 사용하여 카드 갑판을 시뮬레이션하려고합니다./deck/class가 52 객체 배열의 카드를 순서대로 초기화하는 메소드를 갖기를 원합니다. 나중에이 배열을 셔플 할 수 있습니다.C++ : 단일 수퍼 클래스의 배열 하위 클래스?
어떻게하면됩니까? (나는이 과제를 위해 클래스를 사용해야한다. 아직 벡터를 배웠다.)
"클래스 갑판"과 "클래스 카드 : 공개 갑판"의 두 클래스를 사용하여 카드 갑판을 시뮬레이션하려고합니다./deck/class가 52 객체 배열의 카드를 순서대로 초기화하는 메소드를 갖기를 원합니다. 나중에이 배열을 셔플 할 수 있습니다.C++ : 단일 수퍼 클래스의 배열 하위 클래스?
어떻게하면됩니까? (나는이 과제를 위해 클래스를 사용해야한다. 아직 벡터를 배웠다.)
Card
이 Deck
에서 파생되는 접근 방식이 잘못되었습니다. class Card : public Deck
을 입력하면 이 카드와 데크 사이에 인 관계이므로 Card
은 Deck
입니다. 당연히 이것은 옳지 않습니다.
덱이 일련의 카드가되기를 원하고 새로운 데이터 유형이 필요하지 않습니다.
Deck create52CardDeck(void) {
Deck deck;
// your code here, use push_back to add cards to the deck
return deck;
}
당신이 주장하는 경우 : 완벽한 52 카드 갑판을 반환하는 함수를 작성,
using Deck = std::vector<Card>;
Deck deck;
그리고 마지막으로 : 당신이 원하는 경우
std::vector<Card> deck;
, 당신은 별칭을 만들 수 있습니다 갑판을위한 클래스를 갖는 것은 캡슐화하여 수행 할 수 있습니다. std::vector :
class Deck {
std::vector<Card> vector;
public:
// make an empty deck
Deck(void) = default;
// then you can make your own methods:
static Deck create52CardDeck(void) { ... }
void shuffle() { ... }
Card takeFromTop(void) { ... }
void putCardOntop(Card c) { ... } // or const Card& argument
};
std::vector 대신 카드 배열이나 링크 된 목록을 사용하는 방법도 있습니다. 그러나 이러한 작업으로 인해 일부 작업은 구현하기가 더 복잡해집니다. 여기에 추가 할 예정이지만 Card
배열을 사용하면 몇 가지 의미가 있습니다. 그 중 하나는, 당신은 갑판에 대해 별도의 클래스를 가진에 vector
를 사용하고 주장 할 수없는 경우 일부 카드는 52
class Deck {
Card cards[52];
unsigned int ncards;
public:
// make an empty deck
Deck(void) : ncards(0)
{}
// the other methods will have to manipulate the array properly
};
사실 저는 아직 벡터를 배웠지 않았으며 이것은 과제의 일부이기 때문에 수업을 사용하여 그것에 관해 가봐야 만합니다. 명확히하지 않은 것에 대해 사과드립니다. – user3728321
클래스에는 여전히 구현이 필요합니다. 다른 대안으로는 벡터 대신 배열을 사용하는 것입니다. 그러나 벡터는 가장 좋은 접근 방법입니다. 필요한 것은 사용 방법을 알고 있어야하기 때문입니다. –
@ user3728321 벡터는 C 스타일 배열보다 훨씬 사용하기 쉽습니다. –
에서 찍은 경우 배열의 모든 슬롯이 실제로 카드를 가질 수없는 것입니다 다음은 Deck
Card
의 배열 유지해야한다 :
class Deck {
Card cards[52];
};
을 무슨 문제? –
왜'카드'는'갑판 '의 전문화가 될까요? – juanchopanza
데크는 카드의 컨테이너 일 수 있습니다. 'std :: vector deck;'거기에는 상속이 필요 없습니다. –