blh_ind
Messages postés9Date d'inscriptionmercredi 5 mai 2004StatutMembreDernière intervention15 novembre 2005
-
25 mars 2005 à 11:49
blh_ind
Messages postés9Date d'inscriptionmercredi 5 mai 2004StatutMembreDernière intervention15 novembre 2005
-
25 mars 2005 à 17:25
Bonjour à tous.
Probleme de polymorphisme, je vais pété un plomb
Question : comment obtenir = Fils à l'étape 4 5 7 8 sans caster.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 mars 2005 à 12:43
2 trucs que je vois :
- Fils * F1;
cout << "------------ Etape 04 ------------" << endl;
* Tab[1] = * F1;
> F1 n'est jamais crée, il faut faire Fils * F1 new Fils.
- ton operateur pour les fils ne sera jamais appelé par un pointeur sur Pere car elles ont beau être virtuelles ce ne sont pas les même (les arguments ne sont pas les même)> mettre dans le fils
virtual Pere & operator = (const Pere & source) {cout << "= Fils" << endl; return *this;}
pour réalisre une surcharge correcte.
blh_ind
Messages postés9Date d'inscriptionmercredi 5 mai 2004StatutMembreDernière intervention15 novembre 2005 25 mars 2005 à 13:27
Tu as raison pour :
Fils * F1 = new Fils;
Mais je ne comprends cette phrase :
ton operateur = pour les fils ne
sera jamais appelé par un pointeur sur Pere car elles ont beau être
virtuelles ce ne sont pas les même (les arguments ne sont pas les même)
=> mettre dans le fils
virtual Pere & operator = (const Pere & source) {cout << "= Fils" << endl; return *this;}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 mars 2005 à 14:43
Si ca marche tu peux. sinon un fils est un père de toute façon.
Par contre je sais pas si faire un operateur = virtuel est une bonne idée, car normalement c'est pour manipuler des objets de même nature (à gauche et à droite) sans passer par des pointeurs. Ca n'a pas beaucoup de sens de faire une copie en profondeur d'un fils vers un père.
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 mars 2005 à 15:34
C'est assez bizzare l'utilisation que tu veux faire. si tu veux mettre un nouveaux fils dans le tableau c'est plutot comme cela qu'il faut faire :
Tab[1] = new Fils(F1);
Après avoir bien sur fait un constructeur adequate.