因此,我们现在正在为班级分配一个项目,并且我试图弄清楚如何正确深度复制一系列卡片。下面我将发布整个.cpp和.h的文件,我相当肯定它在operator =函数中,但我真正想要的只是如何解决它的一些提示。矢量是不允许使用的,也不是字符串。这是一个初级班,所以我们不太了解。我收到的主要错误是_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)请提前致谢。运营商=超载
//.h
#pragma once
#include "stdafx.h"
#include "Card.h"
class Player
{
private:
// Needed for unit tests
// DO NOT REMOVE OR RENAME
char* m_name; // Can change size of array if needed
Card* m_hand; // Can change size of array if needed
int m_numCards; // The number of cards the player is currently holding
int m_maxCards; // The number of cards the player can store (the number of elements in Hand)
int m_score;
public:
Player(const char* _name = "Player", int _maxCards = 5);
Player(const Player& _cpy);
virtual ~Player();
Player& operator=(const Player& _assign);
const char* GetName() const { return m_name; }
bool GetCard(int, Card&) const;
int GetNumCards() const { return m_numCards; }
int GetMaxCards() const { return m_maxCards; }
int GetScore() const { return m_score; }
/*MUTATORS*/
void SetName(const char* _name);
void AddToScore(int addScore);
bool AddCard(Card);
bool Discard(int index, Card&);
void Clear();
virtual void Show() const;
// Needed for unit tests
// DO NOT REMOVE
friend class CTestManager;
};
//.cpp
#include "Player.h"
Player::Player(const char* _name, int _maxCards){
m_name = NULL;
SetName(_name);
m_hand = NULL;
m_hand = new Card[_maxCards];
m_maxCards = _maxCards;
m_numCards = 0;
m_score = 0;
}
Player::Player(const Player& _cpy)
{
m_name = NULL;
SetName(_cpy.m_name);
m_hand = NULL;
m_hand = new Card(*_cpy.m_hand);
m_maxCards = _cpy.m_maxCards;
m_numCards = _cpy.m_numCards;
m_score = _cpy.m_score;
}
Player::~Player(){
delete[] m_name;
delete[] m_hand;
}
Player& Player::operator=(const Player& _assign)
{
if (this != &_assign)
{
delete[] m_name;
SetName(_assign.m_name);
delete[] m_hand;
//enter implemented deep copy here//
m_maxCards = _assign.m_maxCards;
m_numCards = _assign.m_numCards;
m_score = _assign.m_score;
}
return *this;
}
bool Player::GetCard(int index, Card& _Card) const{
if (index < m_numCards && index >= 0){
_Card = m_hand[index];
return true;
}
return false;
}
/*MUTATORS*/
void Player::SetName(const char* _name){
delete[] m_name;
int len = strlen(_name) + 1;
m_name = new char[len];
strcpy_s(m_name, len, _name);
}
void Player::AddToScore(int addScore){
m_score += addScore;
}
bool Player::AddCard(Card _addCard){
if (m_numCards != m_maxCards){
m_hand[m_numCards++] = _addCard;
return true;
}
return false;
}
bool Player::Discard(int discardIndex, Card& _discardCard){
if (discardIndex >= m_numCards){
return false;
}
else{
_discardCard = m_hand[discardIndex];
for (int i = discardIndex; i < m_maxCards - 1; i++){
m_hand[i] = m_hand[i + 1];
}
m_numCards--;
return true;
}
}
void Player::Clear(){
m_numCards = 0;
}
void Player::Show() const{
}
如果有任何提示,任何人都可以给我,我会非常感激:D再次感谢。
成语*](http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-and-swap)。 – juanchopanza
有关建议,请参阅此[常见问题](https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom) – 2014-01-17 06:53:42