Bonjour à tous,
J'essaye de construire l'architecture d'un jeu de carte en C++ (pour bien m'entraîner) et j'ai les classes suivantes :
Une classe abstraite Card qui ne peut pas être instanciée :
Une classe abstraite ColorCard qui hérite de Card, elle même ne pouvant pas être instanciée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class Card { private: std::string type; public: Card(std::string type); virtual ~Card() = 0; std::string getType(); };
Et enfin une classe NumberCard qui hérite de ColorCard :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class ColorCard : public Card { private: std::string color; public: ColorCard(std::string type, std::string color); virtual ~ColorCard() = 0; std::string getColor(); };
J'ai une première question : est-ce la bonne façon de déclarer une classe abstraite en mettant un constructeur virtuel = 0? (l'idée est de se rapprocher des classes abstraites en Java).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class NumberCard : public ColorCard { private: int number; public: NumberCard(std::string color, int number); int getNumber(); };
Maintenant j'ai une classe Player, qui contient une liste de cartes (sa main) :
On peut ajouter une carte grâce à la méthode addCard de Player cependant, le fait d'avoir défini la classe abstraite Card m'empêche d'utiliser le polymorphisme (qui marcherait correctement en Java) et j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class Player { private: int id; std::vector<Card> cards; public: Player(int id); void addCard(Card card); };
Quelle est la bonne façon de faire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 In file included from src/Player.cpp:3: src/Player.hpp:16:27: error: cannot declare parameter card to be of abstract type Card 16 | void addCard(Card card); | ~~~~~~~~~~~^~~~ In file included from src/Player.hpp:6, from src/Player.cpp:3: src/card/Card.hpp:8:7: note: because the following virtual functions are pure within Card: 8 | class Card { | ^~~~ src/card/Card.hpp:14:11: note: virtual Card::~Card() 14 | virtual ~Card() = 0; | ^ src/Player.cpp:8:33: error: cannot declare parameter card to be of abstract type Card 8 | void Player::addCard(Card card) { cards.push_back(card); } | ~~~~~~~~~~~^~~~
Merci d'avance
Partager