C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Fonction const qui ne modifie pas la structur de donnée mais

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
PRORIOL Fabien
Guest





PostPosted: Tue Aug 10, 2004 5:19 pm    Post subject: Fonction const qui ne modifie pas la structur de donnée mais Reply with quote



Bonsoir,

J'ai un petit problème;

En gros j'ai une classe qui contient une liste chainé d'element.
Elle contient comme attribut un pointeur sur le premier element de la liste,
et un pointeur qui me sert d'Iterateur pour un parcour de la liste.

J'ai une methode InitPtr qui initialise l'iterateur au premier element et
une methode pLire() qui retourne une copie de l'element puis fait pointer
l'Iterateur sur l'element suivant.

J'aimerais pouvoir definir les methode pLire et InitPtr comme "const" étant
donnée qu'elle ne modifie en rien la structure de donnée de la classe;
Mais comme elle modifie un attribut, ce n'est pas possible.

Que puis-je employer comme solution; existe-t-il une methode permettant de
resoudre mon pb (mettre l'iterateur comme membre static de la fonction
pLire, mais alors comment l'initialiser....).

Si vous avez une solution a mon probleme, merci d'avance
@+Fab


Back to top
Thierry Miceli
Guest





PostPosted: Tue Aug 10, 2004 10:45 pm    Post subject: Re: Fonction const qui ne modifie pas la structur de donnée Reply with quote



Ajoute 'mutable' devant la déclaration de l'itérateur. Tes fonctions membres
const pourront alors le modifier sans que le compilateur se plaigne.


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed Aug 11, 2004 8:05 am    Post subject: Re: Fonction const qui ne modifie pas la structur de donnée Reply with quote



"PRORIOL Fabien" <c4 wrote


Quote:
J'ai un petit problème;

En gros j'ai une classe qui contient une liste chainé d'element. Elle
contient comme attribut un pointeur sur le premier element de la
liste, et un pointeur qui me sert d'Iterateur pour un parcour de la
liste.

J'ai une methode InitPtr qui initialise l'iterateur au premier element
et une methode pLire() qui retourne une copie de l'element puis fait
pointer l'Iterateur sur l'element suivant.

J'aimerais pouvoir definir les methode pLire et InitPtr comme "const"
étant donnée qu'elle ne modifie en rien la structure de donnée de la
classe; Mais comme elle modifie un attribut, ce n'est pas possible.

Non seulement elles modifient un attribut, elles modifient l'état
visible. Elle ne doivent donc pas être const.

Quote:
Que puis-je employer comme solution; existe-t-il une methode
permettant de resoudre mon pb (mettre l'iterateur comme membre static
de la fonction pLire, mais alors comment l'initialiser....).

Le véritable problème, c'est que ton objet maintient deux états
distincts : le contenu de la liste, et la position de l'itérateur. Du
coup, indépendamment du problème évident de ne permettre qu'une seule
itération sur la liste à la fois, il pose le problème de const.

La solution évidente, c'est d'en faire deux classes : la liste, et
l'itérateur.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Wed Aug 11, 2004 8:09 am    Post subject: Re: Fonction const qui ne modifie pas la structur de donnée Reply with quote

"PRORIOL Fabien" <c4 writes:

Quote:
Bonsoir,

J'ai un petit problème;

En gros j'ai une classe qui contient une liste chainé d'element.
Elle contient comme attribut un pointeur sur le premier element de la liste,
et un pointeur qui me sert d'Iterateur pour un parcour de la liste.

J'ai une methode InitPtr qui initialise l'iterateur au premier element et
une methode pLire() qui retourne une copie de l'element puis fait pointer
l'Iterateur sur l'element suivant.

J'aimerais pouvoir definir les methode pLire et InitPtr comme "const" étant
donnée qu'elle ne modifie en rien la structure de donnée de la classe;
Mais comme elle modifie un attribut, ce n'est pas possible.

Que puis-je employer comme solution; existe-t-il une methode permettant de
resoudre mon pb (mettre l'iterateur comme membre static de la fonction
pLire, mais alors comment l'initialiser....).

Si vous avez une solution a mon probleme, merci d'avance

Regarde "mutable" et si le sujet t'interesse cherche "logical
constness" et "physical constness".

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
PRORIOL Fabien
Guest





PostPosted: Wed Aug 11, 2004 9:11 am    Post subject: Re: Fonction const qui ne modifie pas la structur de donnée Reply with quote

Merci beaucoup,
C'est exactement ce que je recherché.
Comme je n'avais jamais utilisé de tel variable, j'avais totalement oublié
le mot clé "mutable" ;-)

Merci beaucoup



Quote:
Ajoute 'mutable' devant la déclaration de l'itérateur. Tes fonctions
membres
const pourront alors le modifier sans que le compilateur se plaigne.



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.