Donc en indiquant que c'est une voiture on rajoute des caractéristiques,le moteur par exemple.
Exact.Non. Quand on fait
Code:
vehicule* ve;
il n'y a aucun objet pointé par ve.
Donc en indiquant que c'est une voiture on rajoute des caractéristiques,le moteur par exemple.
Exact.Non. Quand on fait
Code:
vehicule* ve;
il n'y a aucun objet pointé par ve.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
pour utiliser les caractéristiques il faut que tu cast sinon il ne voit que les caractérisitques d'un vehicule mais en revanche il utilise la méthode spécifique liée à la voiture
Hiko-seijuro
n'cha - hoyoyo gang
espace perso : http://hiko-seijuro.developpez.com
dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
consulter les faqs : http://www.developpez.com/faq
PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL
Donc en downcastant on rajoute réelement des caractéristiques.pour utiliser les caractéristiques il faut que tu cast
On n'accéde pas à des caractéristiques existantes mais "cachées" précedemment.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
ouaip en gros c ca
Hiko-seijuro
n'cha - hoyoyo gang
espace perso : http://hiko-seijuro.developpez.com
dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
consulter les faqs : http://www.developpez.com/faq
PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL
Non. On ne rajoute rien du tout en downcastant, on se rappelle qu'elles sont présentes. C'est tout.
(Et encore, à la condition que cela soit downcastable dans le type fils en question.)
Si A, B, C et D dérivent de M. Que tu as une fonction f qui travaille sur un M. Si dans la fonction tu te dis que si l'objet m est downcastable en un A, alors tu auras accès à des champs propres à A. Tu as tout faux. Parce que tu feras pareil pour B, C, D, et dans six mois pour E et F qui ne sont pas encore définies. Définir des fonctions polymorphes pour ignorer le polymorphisme n'a aucun intérêt. Tu as toutes les chances d'avoir un mauvais design.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
note qu'il y a un upcasting implicite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Vehicule *ve=new Voiture();
avec le downcasting tu fais le chemin inverse pour récupérer v (qui a été perdu) à partir de ve.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Voiture *v=new Voiture(); Vehicule *ve = static_cast<Vehicule*>( v );
note que le cast porte sur le pointeur (dont le type change), mais pas sur l'objet pointé (qui reste toujours le même quel que soient les pointeurs qui le designe).
Donc comme le dit Luc Hermitte on a bien accés à des données qui étaient présentes mais "cachées" à cause de la nature du pointeur?note que le cast porte sur le pointeur (dont le type change), mais pas sur l'objet pointé (qui reste toujours le même quel que soient les pointeurs qui le designe).
On ne touche pas à l'objet pointé en "l'agrandissant".
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
Sa place en mémoire n'est pas modifiée effectivement....
Si par exemple tu fait un dynamique_cast ça ne va pas réalouer de la mémoire pour 'rajouter' ce qu'il n'y a pas dans une class mere pour en faire une class fille...
L'intérêt du polymorphisme est justement la....
Voir par exemple le design patern factorie, la class factorie sait qu'elle va construire des véhicules (pour reprendre l'exemple du début), mais elle ne sais pas ce que c'est qu'un vélo, ou une voiture.... Donc la factorie elle retourne des véhicules, c'est l'utilisateur qui définie dans la factorie quel type de véhicule c'est, vélo, voiture, camion...
Première grosse démo en construction :
http://bitbucket.org/rafy/exo2/
Merci de ces explications.
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager