salut,
je comprend l´héritage les classes les objets et tout et tout mais au polymorphismes je bloque
merci de m,aider a comprendre .
bin déjà est ce que tu comprends le mot en lui-même ? que veux dire polymorphisme d´après toi ( sans parler de programmation...)
judicieuse remarque Aitonfrere,
dis nous ce que tu penses du polymorphisme, en général, et j´essaierai d´adapter une réponse à cela, en fonction de ce que tu réponds
De toute façon, si tu ne masterise pas encore le C++, le polymorphisme n´est pas primordial
tu eux t´en passer.
Je ne peux que donner un début de réponse de ce que j´imagine être le polymorphisme de Classes :
Ce sont des classes qui contiennent une structure, une architecture, des methodes abstraites qui seront capables de dériver des classes différentes, mais toutes basées sur cette structure héritée : elles sont dites polymorphes car elles peuvent générer des classes aux méthodes analogues, mais aux finalités très différentes . ..
Ceci dit, n´ayant jamais utilisé ce concept, je suis peut être à coté de la plaque
C´est ce que dis luxregina.
Par exemple :
Imaginons une classe FigureGeometrique ( les exemples classiques, mais bon
) .
Cette classe ( pure ou non, à la limite on s´en fiche ) contient une fonction virtuelle nommée " Draw" ( dessiner ) .
Imaginons maintenant que nous créons 3 nouvelles classes : Cercle, Carre, Triangle, héritant de FigureGeometrique et que nous définissons chaque fonction Draw de la classe en fonction de la forme géométrique associée :
Draw de Cercle trace un cercle.
Draw de Carre trace un carre.
Draw de Triangle trace un Triangle.
Considérons maintenant que nous instancions un objet de chacune de ces 3 classe et créons un pointeur vers un Objets FigureGeometrique :
Triangle fig1;
Carre fig2;
Cercle fig3;
FigureGeometrique *ptr;
Maintenant, si on affect à ptr l´addresse de fig1 et que l´on appelle Draw par le biais de ce pointeur ainsi :
ptr = &1;
ptr->Draw();
La figure qui va se dessiner sera un Triangle.
De même avec fig2 :
ptr = &2;
ptr->Draw();
Qui dessinera un carré.
Etc...
Tout ca grâce à la vtable qui assure l´appel de la fonction appropriée.
L´intérêt, c´est par exemple :
Imaginons un monde virtue du genre Quake3.
Celui ci est peuplé de nombreuses entités très diverses : joueurs, armes, particules, roquettes.
Il suffit de créer une classe de base Entity avec un membre virtuel Draw par exemple, que l´on définira ensuite pour chaque classe : Joueurs, Armes, Particules, Roquettes.
Ainsi, au moment de l´affichage, il suffira d´utiliser un tableau de pointeur vers chaque entité du monde pour l´afficher simplement, sans passer par un schéma classique :
D´abors afficher les joueurs, puis les armes, puis . .. avec des whiles.
En outre, l´avantage du polymorphisme vient du fait que le programme que tu écrit actuellement est apte à utiliser des objets qui n´existent pas encore au moment de sa conception : reprenons l´exemple des figures géométriques.
Il n´y en a que 3 types ppour l´instant, mais en rajouter un quatrième est chose aisée pouisqu´il suffit d´hériter un nouvelle classe.
Le système d´affihage quand à lui n´aura pas besoin d´être modifié car utilisant un pointeur vers la classe de base FigureGeometrique.
Le Polymorphisme est réellement un outils très puissant ![]()
cool ! j´avais pas faux
http://www.inrialpes.fr/sherpa/people/genoud/DESSIDC/cours/heritage2/heritage2.htm
merci beaucoupe pour vos réponse je comprend maintenant mais j´ai une autre question a quoi serve les constructeur et destructeur exactment merci
Les constructeurs et destructeurs, c´est génial ![]()
En fait le constructeur est appelé lors de la création de l´objet et le destructeur est appelé lors ( avant ) de sa destruction.
C´est quoi l´intérêt ?
Initialiser les données, désalouer de la mémoire allouée dynamiquement avant la destruction de l´objet, faire office de constructeur de copie.
Mais achète toi un bouquin si ce n´est déjà fait, et lit le car le language C++ est très ( trop?) vaste ![]()
Le système d´affihage quand à lui
n´aura pas besoin d´être modifié
car utilisant un pointeur vers la
classe de base FigureGeometrique
Ce que tu decrit lag-it peut etre fait avec le systeme d´heritage. Pas besoin de " polymorphisme".
Moi je sais pas ce que c´est et j´en ai jamais vu utilisé dans les jeux . .. C´est le genre de truc a la con du C++ qui est un peu trop complexe et inutile, du coup a part les " C++ lovers for ever", personne ne l´utilise car personne ne comprends a quoi ca peut servir
Voila ma definition du polymorphisme . ..
C´est comme l´heritage multiple . .. dangereux . .. bouhhhhh.
" C´est le genre de truc a la con du C++ qui est un peu trop complexe et inutile, du coup a part les " C++ lovers for ever", personne ne l´utilise car personne ne comprends a quoi ca peut servir "
tu t´en es surement servi sans t´en rendre compte j´imagine . ..
Comment ferais-tu pour utiliser une liste d´objets héritant de la même classe ?
prend cet exemple :
class Creature :
{
blabla
};
class Troll : public Creature
{
bleble
}
class Dragon : public Creature
{
blibli
};
Troll UnTroll;
Troll UnAutreTroll;
Dragon LeMechantDragon;
Dragon LeGentilDragon;
tu stockes comment tout ca dans une liste ? ( pas de cast en void* please. . .) ?
Ben je gere tout ca en type " Creature" . ..
C´est l´heritage n´est il pas ?
Ils en parle meme pas dans mon bouquin
Pour moi ca fait partie de l´heritage et des notions que ca entraine. Je savais pas que ca avait un nom . ..
Bon ben tant mieux ca a un nom. Mais bon, on peut vivre sans savoir que ca s´appelle comme ca ![]()
oui mais on appele ca également du polymorphisme d´objet car les éléments de la liste peuvent être à la fois de Troll ou des Dragons . ..
pour aller plus loin tu peux avoir du polymorphisme de méthodes..
imaginons que dans créature on ait la fonction :
virtual void Hit(...); / / pour frapper qqun
chaque créature pourra redéfinir sa facon de frapper . ..
et via la liste :
Creature *pListCreatures;
pListCreatures->Hit(...);
l´appel ira chercher la bonne méthode ( celle de l´objet concerné).
Ok.
Comme tu dis, j´utilise deja ce genre de chose.
C´est l´essence meme de l´heritage et le concept de fonctions virtuelles . .. ( d´avoir une implementation differente suivant les classes, mais qu´on puisse les manipuler a un niveau d´abstraction assez haut pour qu´on ait pas a s´occuper de ses differences).
voilà bin c´est pas si dangereux que ca, et même très pratique ![]()
Ah ben non c´est pas dangereux du tout . ..
C´est le nom qui fait peur ! !!! ahahahah
" C´est le genre de truc a la con du C++ qui est un peu trop complexe et inutile, du coup a part les " C++ lovers for ever", personne ne l´utilise car personne ne comprends a quoi ca peut servir"
C´est peut être un peu caricatural car c´est vraiment un concept très utile et puissant du langage ![]()
Mais ca c´est comme l´orienté objet : au début ca fait gadget et on peut très bien s´en passer, mais quand on se plonge vraiment dedans on se rends compte que c´est très pratique, bien que l´on puisse parfaitement se passer du polymorphisme.
Mais énormément de gens s´en passent.
lag-it
C++ lover for ever ![]()
lag-it > Fallait lire ce que j´ai ecrit aprés.
Le polymorphisme est trés interressant, mais pour moi c´est simplement une facon d´utiliser l´heritage et les fonctions virtuelles . ..
En fait j´ai confondu avec des trucs plus space comme l´heritage multiple par exemple. Je pensais que c´etait un truc comme ca le polymorphisme . ..
Me suis trompé. C´est cool le polymorphisme
![]()
J´avais survolé ![]()
Mais c´est vrai que l´héritage multiple est un peu plsu spécial, ca je m´en sert vraiment jamais.