Destructeurs et virtual [Résolu]

magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 23 août 2005 à 12:20 - Dernière réponse : magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 23 août 2005 à 16:16
3
Merci
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 !!

Merci cosmobob 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de cosmobob
Meilleure réponse
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 23 août 2005 à 16:18
3
Merci
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.

___________________________________________________________
Magicalement
Nono

Merci magic_Nono 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de magic_Nono
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 23 août 2005 à 15:31
0
Merci
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 ...

a+
Commenter la réponse de cosmobob
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 23 août 2005 à 15:51
0
Merci
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
Commenter la réponse de cosmobob
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 23 août 2005 à 20:53
0
Merci
"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)
Commenter la réponse de vecchio56
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 23 août 2005 à 21:01
0
Merci
Ca y est j'ai compris le rapport :)
Commenter la réponse de vecchio56
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 23 août 2005 à 21:13
0
Merci
lol rapide !
Commenter la réponse de cosmobob
magic_Nono 1878 Messages postés jeudi 16 octobre 2003Date d'inscription 16 mars 2011 Dernière intervention - 24 août 2005 à 01:54
0
Merci
ui, cf 1er post de cette page

___________________________________________________________
Magicalement
Nono
Commenter la réponse de magic_Nono

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.