Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4746 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  dynamic_cast et upcasting

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

dynamic_cast et upcasting

n°1831889
frenchtouc​co
Posté le 28-12-2008 à 05:35:00  profilanswer
 

Hi,
 

Code :
  1. #include <iostream>
  2. class A
  3. {
  4. public:
  5.     A() {  }
  6.     virtual ~A() {  }
  7.     virtual void print(){std::cout << "A.\n"; }
  8. };
  9. class B : public A
  10. {
  11. public:
  12.     B() { }
  13.     ~B() {  }
  14.      virtual void print(){std::cout << "B.\n"; }
  15. };
  16. int main()
  17. {
  18.     B* b = new B;
  19.     A * a = dynamic_cast<A*>(b);
  20.     a->print();
  21.     delete a;
  22. }


 
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.
mood
Publicité
Posté le 28-12-2008 à 05:35:00  profilanswer
 

n°1831900
Taz
bisounours-codeur
Posté le 28-12-2008 à 11:27:44  profilanswer
 

y a pas à caster un B* en A* puisqu'un B est un A.
 
a = b;

n°1831928
frenchtouc​co
Posté le 28-12-2008 à 15:24:30  profilanswer
 

oui exact, mais pour autant le compilo appel la fonction de B et j'aurais souhaité qu'il appel la fcnt de A...


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1831953
Taz
bisounours-codeur
Posté le 28-12-2008 à 17:59:41  profilanswer
 

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 :
  1. B b;
  2. A a(b); // ou un =
  3. a.print();

n°1831961
frenchtouc​co
Posté le 28-12-2008 à 19:04:17  profilanswer
 

donc un objet fille ne peut pas perdre son caractère fille et ne conserver que son caractère base alors ??


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1831992
Taz
bisounours-codeur
Posté le 28-12-2008 à 21:36:12  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  dynamic_cast et upcasting

 

Sujets relatifs
[Probleme] Dynamic_cast<T>(x) - Unix Segfaultintégrer spring dans un Dynamic Web Project
Libxml++ : find and dynamic_castSegmentation fault et make pointer from interger without a cast
[C#] Erreur de cast !!petite question sur l'héritage et les cast
Assignment makes pointer from integer without a cast...RESOLU warning: assignment makes integer from pointer without a cast
Plus de sujets relatifs à : dynamic_cast et upcasting


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)