si une fonction redefinie possède le modificateur const, ect-ce que la fonction de la classe mère doit aussi le porter ?
Et si la classe mère est virtuelle pure ?
Comment mixer tout ca ?
si une fonction redefinie possède le modificateur const, ect-ce que la fonction de la classe mère doit aussi le porter ?
Et si la classe mère est virtuelle pure ?
Comment mixer tout ca ?
const fait partie de la signature, donc il n'y a pas supplantage mais surcharge (et comme celle de la mere est cachee, ca peut passer inappercu).
concretement je met ce const sur les signatures des fonction virtuelle pure ou pas ?
et au niveau syntaxe je bloque un peu...
()const =0;
()=0 const;
Oui. Si tu le mets dans l'une, tu le mets dans toutes.
Et à ma connaissance, const = 0 marche. Pour l'autre, je ne sais pas.
Comme ca.Envoyé par ZaaN
Ne devrait pas compiler.()=0 const;
Salut,
Le fait qu'une fonction puisse être déclarée constante - ce qui signifie qu'elle s'engage à ne pas modifier les valeurs des membres de la classe à laquelle elle appartient - n'a strictement rien à voir avec le fait que l'on puisse déclarer une fonction virtuelle pure...
Par contre, toute la subtilité réside dans la différence entre la redéfinition d'une fonction membre ou sa surcharge
La redéfinition d'une fonction revient à dire que
(en sous-entendant le fait qu'il y ait une relation d'héritage entre les différents types envisagés, cela va de soi)Je veux que telle fonction, quand je lui fourni tel(s) parametre(s) bien précis (ou si tu préfères: quand elle a telle signature bien précise ), réagisse différemment selon le type de variable à partir duquel elle est appelée
La surcharge d'une fonction par contre revient à dire que
Le tout, en adaptant le fonctionnement de la fonction aux nouveaux paramètres, cela va de soije veux pouvoir obtenir le même résultat, mais en fournissant un/des paramètre(s) de type différent
Et comme le fait de déclarer une fonction constante à la place d'une fonction qui ne l'était pas (ou inversement, d'ailleurs) revient à modifier un paramètre essentiel au fonctionnement de la fonction (ben ouaip: d'un côté, elle est libre de modifier les membres de la structure "à sa guise" et de l'autre ça lui est interdit ) nous sommes bel et bien dans le cadre d'une surcharge de fonction
Or, une fonction virtuelle pure indique, en gros que
Tu te rendras sans doute compte que ce qui importe à ce moment là, c'est bel et bien de modifier la manière dont se comporte cette fonction une fois que l'on dispose de toutes les informations qui lui permettront d'agir, et qu'il faut donc la redéfinir, et non la surchargerJe sais qu'il existera une fonction ayant telle signature... Seulement, il me manque des informations pour pouvoir expliquer la manière dont elle foncitonne
Et, comme il a été dit plus haut, il faut donner la signature de la fonction (avec l'indication de constance éventuelle) avant de signaler que l'on ne peut pas, pour l'instant, dire comment elle va réagir
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