 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
PRORIOL Fabien Guest
|
Posted: Tue Aug 10, 2004 5:19 pm Post subject: Fonction const qui ne modifie pas la structur de donnée mais |
|
|
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
|
Posted: Tue Aug 10, 2004 10:45 pm Post subject: Re: Fonction const qui ne modifie pas la structur de donnée |
|
|
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
|
Posted: Wed Aug 11, 2004 8:05 am Post subject: Re: Fonction const qui ne modifie pas la structur de donnée |
|
|
"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
|
Posted: Wed Aug 11, 2004 8:09 am Post subject: Re: Fonction const qui ne modifie pas la structur de donnée |
|
|
"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
|
Posted: Wed Aug 11, 2004 9:11 am Post subject: Re: Fonction const qui ne modifie pas la structur de donnée |
|
|
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 |
|
 |
|
|
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
|
|