magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
23 août 2005 à 12:20
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
24 août 2005 à 01:54
Bj, Un des principes de la POO est de toujour faire précéder le
destructeur du mot clef virtual afin qu'il soit appeler meme si il y a
héritage (peut etre y a t'il un autre but)
cependant,
mettre ce mot clef entraine la mémorisation
de l'adresse de la fonction du destructeur (enfin si c'est bien ça)
transmise avec chaque instance de l'objet
et occupe donc
une certaine place ce qui peut etre contrariant
et si on a un grand nombre d'occurences de notre classe
par conséquent,
préconnisez vous l'usage systématique de ce mot clef
ou ne l'utilisez vous
uniquement pour les classes utilisant l'héritage
Merci à vous.
___________________________________________________________
Magicalement
Nono
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 23 août 2005 à 16:16
sinon, je vois pas comment "un des principes de la POO est de toujour
faire précéder le destructeur du mot clef virtual" puisque dans d'autre
langages objet (ex: Java), tlm est virtuel par défaut, donc le mot clé
virtual n'existe meme pas.
Et la phrase "un des principes de la POO en C++ est de toujour faire
précéder le destructeur du mot clef virtual" est un faux principe, vu
que c'est a reserver aux classes qui servent d'interface aux autres. Tu
es pas censé vouloir dériver n'importe quelle classe, ou vouloir faire
du polymorphisme avec. Les containers de la STL ont pas de descructeur
virtual !!
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 23 août 2005 à 16:18
parfaitement d'accord
faudra expliquer un jour à nos ex prof qu'ils nous apprennent que des conneries,
je me rappelle avoir u des pt en moins a cause de qqch comme ça
Bon, on sait qu'il y a une distance entre le monde réel et les études, mais là, C mm plus un précipice, ça s'apparente à l'océan, et encore, je suis gentil.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 23 août 2005 à 15:31
salut,
pour moi, mettre un descructeur virtuel a une classe qui n'a aucune
autre fonction virtuelle est un non sens. On anticipe une évolution de
l'interface de la classe (en disant, si on rajoute une fonction
virtuelle, et qu'on fait du polymorphisme avec, il faudra qu'il y ait
un destructeur virtuel), mais cette situation n'arrive jamais !! et si
cela arrive, c'est de la responsabilité de celui qui ajoute une
fonction virtuelle que de placer le descructeur de la classe de base
virtuel aussi.
et si en C++ tu fais de l'héritage sans virtualité, pour factoriser,
alors autant preferer systematiquement la méthode d'aggregation (pas de
dérivation de la classe A, mais un objet de type A est un champ de la
classe B).
voila, enfin il y a des gens qui vont precher le contraire ...
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 23 août 2005 à 15:51
cela dit, si ton compilateur est malin (vs7 l'est), si tu utilises
statiquement un objet qui a un descructeur virtuel, ton compilo ne
creera aucune table de fonctions virtuelles. Dans le code generé, il
n'y aura donc a mon avis aucune difference !!
enfin selon moi, autant se servir de certains trucs qd c'est pertinent,
et un descructeur virtuel si tu fais jamais d'héritage c'est un peu
débile
Vous n’avez pas trouvé la réponse que vous recherchez ?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 août 2005 à 20:53
"pour moi, mettre un descructeur virtuel a une classe qui n'a aucune autre fonction virtuelle est un non sens"
J'ai pas compris le rapport (on peut faire del'héritage sans fonctions virtuelles)