Heritage en c++
Résolu
hobro
-
hobro -
hobro -
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.
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
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...
c'est le polymorphisme...
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.
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.
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!)
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!)