Edit:Объект нарезка: Доступ dervied методы класса от базового класса объекта
Проблема заключается в файле GoFish.h, в конструктор к быть конкретным, когда он пытается создать экземпляр объекта игроков.
Компилятор не выдает следующее сообщение об ошибке: не член с именем «noOfBooks» в «Игрок»
GoFish() {players = new GoFishPlayer[2];} // Instantiate two players
Объект нарезка, кажется, один из самых неоднозначных понятий в ООП для начинающих. Я работаю над этой карточной игрой на C++, где у меня есть базовый класс: Игрок и производный класс GoFishPlayer. При попытке получить доступ к методам объекта GoFishPlayer, ссылающимся на объект Player, программа имеет тенденцию отсекать определенные методы и атрибуты для производного класса, тем самым делая его клоном базового объекта. Есть ли способ преодолеть эту проблему?
Game.h
Абстрактный класс игры: который формирует основу для обеих игр - GoFish и CrazyEights
class Game {
protected:
Deck* deck;
Player* players;
int player_id;
public:
Game(){
deck = Deck::get_DeckInstance(); // Get Singleton instance
player_id = choosePlayer();
players = NULL;
}
....
}
GoFish.h
производный класс GoFish - Проблема здесь в конструкторе, когда я пытаюсь создать экземпляр объекта игрока, полученный из класса Game
class GoFish : public Game{
static GoFish* goFish;
GoFish() {players = new GoFishPlayer[2];} // Instantiate two players
public:
static GoFish* get_GoFishInstance() {
if(goFish == NULL)
goFish = new GoFish();
return goFish;
}
Player.h
class Player{
protected:
std::string playerName;
Hand hand;
bool win;
public:
Player(){
playerName = "Computer"; // Sets default AI name to Computer
hand = Hand(); // Instatiate the hand object
win = false;
}
....
GoFishPlayer.h
class GoFishPlayer : public Player {
private:
std::vector <int> books;
int no_of_books;
public:
GoFishPlayer() {
no_of_books = 0;
books.resize(13);
}
int noOfBooks(){return no_of_books;}
void booksScored() {no_of_books++;}
bool checkHand() {}
....
Это много кода - на что мы на самом деле должны смотреть? –
где ваш код, который вызывает клонирование объектов? –
Это указатели - там нет нарезки. –