Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonction virtual et const

1 réponse
Avatar
michel45
Bonjour =E0 tous,
Je suis nouveau et merci de votre indulgence.
Dans un code d'une Class j'ai trouv=E9 des fonctions virtuelles cod=E9es
comme suit :

virtual void f() const=3D0;
Je n'ai pas saisi le "const=3D0".

Pour ma part j'aurais =E9crit :
virtual void f()=3D0 const;

Mes questions : Est-ce la m=EAme chose ? les donn=E9es membres de la
Class ne seront pas modifi=E9es.
Qui est dans le juste ?

Merci d'avance pour vos =E9clairsissements.
Michel

1 réponse

Avatar
James Kanze
michel45 wrote:

Je suis nouveau et merci de votre indulgence. Dans un code
d'une Class j'ai trouvé des fonctions virtuelles codées comme
suit :


virtual void f() const=0;
Je n'ai pas saisi le "const=0".


Le « const=0 » ne signifie rien:-). Il y a deux choses
distinctes, en fait, « const » et « = 0 ».

Le « const » signifie que le type de this, dans la classe, est T
const*, et non T* ; normalement, on le considère un contrat que
la fonction ne modifie pas l'état « visible » de l'objet. Le
const fait partie du type de la fonction.

Le « = 0 » signifie que la fonction est pûre, c-à-d qu'elle ne
serait jamais appelée en tant que fonction virtuelle, et qu'elle
doit obligatoirement être supplantée dans une classe dérivée.

virtual void f()=0 const;


Ce qui serait faux. Le fait d'être pûre se met toujours à la
fin. Après tout ce qui concerne le type.

Mes questions : Est-ce la même chose ?


Non, vue que ta suggestion n'est pas légale.

les données membres de la Class ne seront pas modifiées.


C'est le const qui signifie ça. Grosso modo, parce que les
règles sont en fait un peu plus complexe. Dans la pratique, il
est prèsqu'universel d'utiliser le const « logique », c-à-d que
le programmeur définit ce que signifie « const » pour la classe,
et s'y tenir.

Qui est dans le juste ?


L'exemple que tu as vu.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34