Classe abstraite : initialisation utilisation

GeneralHammond89 - 28 févr. 2009 à 11:55
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 28 févr. 2009 à 23:51
Bonjour,

Voici mon problème, je dois réaliser un projet qui consiste à faire un jeu d'échecs en C++:

Pour cela j'ai une classe abstraite Piece et des classes qui en hérite Pion,Fou, Cavalier...
J'aimerai dans mon main utiliser un tableau de classes ou j'aurai par exemple

Piece *T;
Pion P;
Fou F; // et ainsi de suite

//et plus loin :

T[1]=P;
T[2]=F;


Ma question est comment faire pour que ça marche?
Je ne trouve pas la bonne initialisation à faire :

Tb = new Piece [N]; // est impossible puisque Piece est abstraite.


Merci d'avance pour votre aide!

3 réponses

GeneralHammond89
28 févr. 2009 à 12:48
Peut être que ce n'est pas possible?
En tout cas je sais que ça marche avec un tableau a deux dimensions en faisant :

//Piece ***T;

et ensuite :

T=new Piece *[N];



(oups sinon il fallait lire T et pas Tbdans mon message précédent)


Une idée?
0
Generalhammond89
28 févr. 2009 à 14:45
Dernière tentative pour faire remonter le sujet discrètement lol :

aller je vais tester une autre méthode (la provocation):


Pfff je vois que personne ici n'est capable de répondre à ma question, je savais bien que ce n'était pas ici que j'aurais l'avis des meilleurs connaisseurs^^
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
28 févr. 2009 à 15:23
Bonjour Generalhammond89,
Si personne ne te répond, c'est sans doute parce qu'on est samedi et qu'il fait beau, peut-être les gens ne sont pas devant leur ordinateur en ce moment :) Laisse donc le sujet un peu plus longtemps, tu auras sans doute des réponses.

Concernant ton problème, c'est parce que tu ne peux pas instancier une classe abstraite (c'est justement ça la définition d'une classe abstraite). En effet, la classe étant abstraite, tu as des méthodes qui ne sont potentiellement pas implémentées. Il faut utiliser des instances de classes qui étendent ta classe abstraite, et qui ne sont elles-mêmes pas abstraites.

Par exemple dans ton cas tu vas créer une classe Pion, une classe Cavalier qui elles ne seront pas abstraites.
Ensuite, tu vas par exemple utiliser des références de type Piece pour les manipuler :
Piece T = new Cavalier();

Cordialement,
0
GeneralHammond89
28 févr. 2009 à 21:42
D'accord, je plaisantais bien sûr dans mon dernier message :-)


Merci pour ton aide en tout cas, je vais essayer de faire quelque chose avec ça, mais si d'autres ont des réponses avec plus de détails je suis preneur!

Bonne soirée!
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
28 févr. 2009 à 23:51
Bonsoir,
Oui, je l'avais bien vu ^^ (sinon je n'aurais pas répondu).
Petit errata dans mon message, il faut un Piece * T = new Cavalier(); et non pas un Piece T = new Cavalier(); (je ne fais que du Java donc j'ai parfois du mal avec la syntaxe C++).

Cordialement,
0