Salut à tous,
Est ce que vous vous servez de l'héritage virtuel?
Dans la mesure où dans les langages type java et c# l'héritage virtuel n'existe pas peux t on dire qu'il s'agit d'une bonne pratique?
Salut à tous,
Est ce que vous vous servez de l'héritage virtuel?
Dans la mesure où dans les langages type java et c# l'héritage virtuel n'existe pas peux t on dire qu'il s'agit d'une bonne pratique?
En Java et C# l'héritage multiple, le plus important raison pour l'existence de l'héritage virtuel, n'existe pas. Je crois que c'est mieux parce que l'héritage multiple de classes peut être la source de beaucoup problèmes. Dans le projets sur lesquelles j'ai travaillé je n'ai jamais vu de cas d'héritage multiple.
Regarde cette faq:
http://www.parashift.com/c++-faq-lit...heritance.html
FAQ.
L'héritage multiple est une solution technique à un problème technique propre au C++, ce n'est pas parce que ca n'existe pas en Java/C# que c'est une mauvaise chose.
Comme dans ces langages, l'héritage multiple n'existe pas, la question ne se pose pas.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
La première question est "est-on pour ou contre l'héritage multiple". Si on est pour (comme moi), l'héritage virtuel est indispensable, même s'il ne répond pas à tout. Sinon, il est inutile.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Salut,
+1...
Je vais cependant me permettre d'étayer un peu mon avis.
Pour moi, l'héritage multiple a deux avantages particuliers:
Le premier est qu'il permet de travailler dans ce que je qualifierai volontiers d' "ordre naturel des choses", à savoir de passer l'étape de conception sans devoir tenir compte d'éventuelles restrictions imposées par le langage, et donc d'arriver à l'étape de l'implémentation sans avoir à "retoucher" (modulo les erreurs de conception qui pourraient devenir flagrante) les décisions prises lors de la conception.
Le second tient au fait que C++ ne fait aucune différence entre une classe présentant une interface et une classe instanciable.
L'héritage multiple est donc la seule solution "raisonnable" lorsqu'il s'agit de rajouter des possibilités issues d'une interface à celles issues d'un objet utilisable.
En effet, bien que je sois globalement d'accord avec le principe qui conseille de préférer l'agrégation / la composition à l'héritage chaque fois que c'est possible, il faut avouer qu'il devient rapidement impossible de l'envisager dans le cas que je mets en avant
Partant de là, il semble "normal", même s'il s'agit d'une spécificté propre au C++, de considérer l'héritage multiple comme "une bonne pratique", même s'il est sans doute important de rappeler qu'il ne doit pas être utilisé "n'importe comment".
Seulement, dés le moment où l'on accepte l'idée de l'héritage multiple, il faut être conscient que la problématique de l'héritage "en losange", voire "en diamant" n'est sans doute pas très loin, deux classes appelées à servir de classe de base pouvant, très souvent, hériter d'une classe "ancêtre" commune.
La conséquence logique est... que l'héritage virtuel devient non seulement une "bonne pratique", mais aussi une "pratique indispensable" afin d'éviter les problèmes qui pourraient être liés au fait de se retrouver avec deux (ou plusieurs) classes "ancêtres" venant des différentes classes de base.
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
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