dynamic_cast et upcasting - C++ - Programmation
Marsh Posté le 28-12-2008 à 11:27:44
y a pas à caster un B* en A* puisqu'un B est un A.
a = b;
Marsh Posté le 28-12-2008 à 15:24:30
oui exact, mais pour autant le compilo appel la fonction de B et j'aurais souhaité qu'il appel la fcnt de A...
Marsh Posté le 28-12-2008 à 17:59:41
ben ça contredit le virtual que tu as demandé.
Sinon tu peux aussi construire un A à partir de ton B puisque un B est un A.
Code :
|
Marsh Posté le 28-12-2008 à 19:04:17
donc un objet fille ne peut pas perdre son caractère fille et ne conserver que son caractère base alors ??
Marsh Posté le 28-12-2008 à 21:36:12
frenchtoucco a écrit : donc un objet fille ne peut pas perdre son caractère fille et ne conserver que son caractère base alors ?? |
Un objet non, son identité est fixe. Par contre comme je te montrais, tu peux tout à fait construire un A à partir d'un B (construire, faire une copie ou bien faire une affectation).
Pense à des boites imbriquées, le B c'est la boite la plus grande, le A, la boite la plus petite contenu dans la boite B. Quand tu manipules des valeurs et que tu fais a = b, tu ne copies dans a que la partie A de b. Quand on fait du polymorphisme, c'est donc important de manipuler tes A comme des A& ou des A* sinon, si tu travailles par valeur, chaque fois que tu prends un B, tu n'en feras qu'une copie tronquée en A.
Marsh Posté le 28-12-2008 à 05:35:00
Hi,
Je souhaite que mon objet B, devienne un ojet A, j'utilse pour cela dynamic_cast... mais ça ne marche pas.
En d'autre terme, pourquoi est ce la fonction print de B qui est appelé et non celle de A ?
Je suis obligé d'utiliser la syntaxe a->A::print() ?
PS:Quand j'utilise static_cast le problème est le même.
PS2:Vaut-il mieux utilser static ou dynamic ?
Ty.
Message édité par frenchtoucco le 28-12-2008 à 05:59:54
---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.