Heritage en c++

Résolu/Fermé
hobro - 6 juin 2008 à 20:52
 hobro - 6 juin 2008 à 21:35
Bonjour,

J'essaye de faire un monopoly en c++, et j'ai un problème lors de la construction du plateau.
J'ai créé une classe cases, et j'ai aussi crée plusieurs classes filles dont par exemple la classe Gare ou Compagnie.
Je compte créé la classe plateau à partir d'un : cases c[40]
Mais un problème se pose à moi, comment faire pour par exemple faire en sorte que la cases 23 du plateau soit de type Gare, et puisse donc lancer le constructeur qui contient toutes les caractéristiques de la case Gare tout en se servant du constructeur de cases bien sur.

Je sais pas si j'ai bien expliqué mon problème, mais je suis débutant en c++.

Merci d'avance de votre aide.

4 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
6 juin 2008 à 20:59
tu créee un tableau de classes mère "case generique", mais dedan, tu y rentre des classees genre "classe gare" ou "classe terrain" ....

c'est le polymorphisme...
0
ah oui, il n'y a pas une histoire avec les "new" ??

Peut tu me mettre un exemple de codage qui illustre cette notion, par exemple avec mon histoire de monopoly.

Merci beaucoup, je vais quand même aller fouiller avec google sur le polymorphisme.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
6 juin 2008 à 21:12
class case{
case();
~case();
char nom[20];
virtual void action()=0;
};

class gare:public case{
gare();
void action();
}

class terrain:public case{
gare();
void action();
}

case* plateau[40];
plateau[0]=new terrain;
plateau[1]=new gare;
...


le virtual sur la fonctuion, ca veut dire que tu autorise la réécriture de cette fonction dans les classes filles. le =0 a la fin, ca veut dire :
1- ta classe est abstraite, car tu as une methode virtuelle pure (celle avec le =0)
2- tu sera obligé de réecrire cette methode dans tes classes files
3- tu n'aura pas le droit d'instancier cette classe (case macase; //interdit!)
0
Ok, merci beaucoup à toi.

Bonne continuation.
0