question sur les fonctions virtuelles - C++ - Programmation
Marsh Posté le 05-11-2004 à 19:29:07
bin C derive de A et A a une fonction virtuelle pure, donc si tu veux instancier C il faut que C definisse ladite fonction
jvois pas le pb ?
Marsh Posté le 05-11-2004 à 19:37:00
Ne confond pas fonction virtuelle et virtuelle pure.
Une fonction virtuelle pure telle que toto n'est pas définie. Dans ce cas, il faut faire comme chrisbk l'indique.
Une fonction virtuelle simple (pas de = 0) possède une définition, il n'est donc pas nécessaire de la déclarée dans les classes héritées, si tu veux surcharger le comportement.
C serait donc valide si tu vires le = 0 et si tu fournis la définition par défaut de toto dans A (mais dans ce cas A n'est plus une interface).
Marsh Posté le 05-11-2004 à 19:37:48
en c++ on ne parle pas d'interface mais de classe abstraite
Marsh Posté le 05-11-2004 à 19:39:20
Le probleme c ke je voudrai ne pas avoir a definir cette fonction dans des classe ki n'en on pas besoin.
je suis entrain de faire un systeme de fenetre avec des container et des elements style boutton ou textedit. et par exemple pour les radiobutton, g un element RadioContainer ki va contenir des element RadioButton.
ces deux element sont derivé d'une classe principale ki contient un tableau de pointeur sur les elements du niveau du dessous. voila un bou de xml pour ilustrer:
<radiocontainer>
<radiobutton value="hehe" caption="lala"/>
<radiobutton value="hehe" caption="lala"/>
<radiobutton value="hehe" caption="lala"/>
<radiobutton value="hehe" caption="lala"/>
</radiocontainer>
donc par exemple le tableau d'elemetn de radiocontainer contient 4 pointeur vers radiobutton.
a savoir ke chaque element possede un pointeur vers son pere. donc radiobutton a un pointeur vers radiocaontainer.
le truc c ke g besoin ke radiocontainer appelle des fonctions de radiobutton et vice versa.
hors comme c de classe n'ont comme point commun ke ma classe principale, il faut ke je declare les fonction que chacune vont appelé chez l'autre en virtuelle.
definir ces fonctions dans c 2 classes ne me poserait pas pb si je n'avait pas un packet de classes autour ki n'ont pas besoin de ces fonctions specifique a c 2 classes.
voila j'espere ke c pas trop confu ce ke je raconte.
Marsh Posté le 05-11-2004 à 19:41:25
Panini a écrit : Ne confond pas fonction virtuelle et virtuelle pure. |
ok c ce ke j'avais commencé a faire, mais la raison pour laquelle j'avais passer en virtuelle pure c ke comme la fonction doit retourner qqch ca foirer.
mais en y pensant si je surcharge ca devrait pas poser pb
je test
merci
Marsh Posté le 05-11-2004 à 19:45:15
Une fonction virtuelle pure peux aussi être définie. Virtuelle pure veut simplement dire "doit être redéfinie".
Marsh Posté le 05-11-2004 à 19:46:31
HelloWorld a écrit : Une fonction virtuelle pure peux aussi être définie. Virtuelle pure veut simplement dire "doit être redéfinie". |
exemple ?
Marsh Posté le 05-11-2004 à 19:48:05
kadreg a écrit : exemple ? |
Code :
|
Marsh Posté le 05-11-2004 à 19:48:53
Ca marche ça ?
Marsh Posté le 05-11-2004 à 19:49:08
kadreg a écrit : exemple ? |
Code :
|
Je sais, ça fait mal...
Marsh Posté le 05-11-2004 à 19:50:04
ReplyMarsh Posté le 05-11-2004 à 19:50:50
Bon, je vais rajouter un test case alors
Marsh Posté le 05-11-2004 à 19:58:08
ReplyMarsh Posté le 05-11-2004 à 20:02:03
Ben au cas ou c'est nécessaire.
Code :
|
Mais je suis d'accord, à part faire discuter sur les forums, y'a pas trop d'utilité.
Marsh Posté le 05-11-2004 à 20:59:14
HelloWorld a écrit : Ben au cas ou c'est nécessaire.
|
En effet ^^.
Marsh Posté le 05-11-2004 à 19:25:46
salut,
je voudrais savoir si l'on declare une fonction virtuelle dans une classe A, et que l'on a des classes B et C ki heritent de A, doit on obligatoirement declarer cette fonction dans les 2 classes.
exemple:
je pose cette question parceque ceci me prose problem a la compil dans visual:
si vous avez une solution pour eviter d'avoir a declarer la fonction dans chacune de mes classes ca serait cool.
merci de votre aide
Message édité par da_s_monk le 05-11-2004 à 19:26:37