 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ben Guest
|
Posted: Fri Sep 05, 2003 3:29 pm Post subject: variable membre initialisable mais non modifiable |
|
|
Est-il possible en C++ d'initialiser une variable membre a la construction
de l'objet, mais d'interdire toute modification futur de cette variable par
les fonctions membres. (un genre de variable constante mais initialisable a
la construction de l'objet)?
Merci
|
|
| Back to top |
|
 |
Laurent Deniau Guest
|
Posted: Fri Sep 05, 2003 3:36 pm Post subject: Re: variable membre initialisable mais non modifiable |
|
|
Ben wrote:
| Quote: | Est-il possible en C++ d'initialiser une variable membre a la construction
de l'objet, mais d'interdire toute modification futur de cette variable par
les fonctions membres. (un genre de variable constante mais initialisable a
la construction de l'objet)?
|
declarer le membre const et utiliser les initializer list du constructeur et
faire attention a l'ordre de declaration des membres (et pas de leur apparition
dans la liste).
a+, ld.
--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ [email]Laurent.Deniau (AT) cern (DOT) ch[/email] - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Fri Sep 05, 2003 3:57 pm Post subject: Re: variable membre initialisable mais non modifiable |
|
|
Le Vendredi 5 Septembre 2003 17:29, Ben a écrit :
| Quote: | Est-il possible en C++ d'initialiser une variable membre a la construction
de l'objet, mais d'interdire toute modification futur de cette variable
par les fonctions membres. (un genre de variable constante mais
initialisable a la construction de l'objet)?
|
Oui :
class Objet
{
public:
Objet(const int var)
: m_variable(var)
{
}
private:
const int m_variable;
};
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Fri Sep 05, 2003 4:01 pm Post subject: Re: variable membre initialisable mais non modifiable |
|
|
"Ben" <serbenet (AT) free (DOT) fr> a écrit dans le message de
news:3f58abec$0$16515$626a54ce (AT) news (DOT) free.fr...
| Quote: | Est-il possible en C++ d'initialiser une variable membre a la construction
de l'objet, mais d'interdire toute modification futur de cette variable
par
les fonctions membres. (un genre de variable constante mais initialisable
a
la construction de l'objet)?
|
Il suffit de la déclarer const :
class x
{
const int y;
public:
x( int z ) : y( z ) {}
};
Chris
|
|
| Back to top |
|
 |
Michaël Monerau Guest
|
Posted: Fri Sep 05, 2003 4:29 pm Post subject: Re: variable membre initialisable mais non modifiable |
|
|
Ben wrote:
| Quote: | Est-il possible en C++ d'initialiser une variable membre a la
construction de l'objet, mais d'interdire toute modification futur de
cette variable par les fonctions membres. (un genre de variable
constante mais initialisable a la construction de l'objet)?
|
Je ne pense pas que ce soit possible directement, avec un type POD.
Cependant, si tu fais une classe qui garde ta valeur, tu pourras y arriver
(avec un template, ça tourne tout seul). Voici un exemple :
template <class T> ProtegeValeur
{
public:
ProtegeValeur (const T& val)
: mVal (val) {}
const T& GetValue () {return mVal;}
// ou aussi :
const T& operator () () {return mVal;}
private:
T mVal;
};
Ainsi, dans ta classe, si tu veux un int seulement initialisable dans le
constructeur tu fais :
class Demo
{
public:
Demo ()
{
mMonInt = ProtegeValeur<int> (4);
}
private:
ProtegeValeur<int> mMonInt;
};
Et le tour est joué. Oui, c'est vrai, il faut ensuite assumer que mMonInt ne
sera pas à son tour changé de valeur, mais c'est quand même beaucoup moins
probable puisqu'il faut une syntaxe assez lourde pour lui assigner une
nouvelle valeur.
Si ca reste un problème, tu assignes la valeur à ProtegeValeur seulement par
une Init (et pas par le constructeur), qui lance une exception (ou retourne
simplement) si une valeur a déjà été assignée et qu'on tente de réappeler
Init(). Cette deuxième solution semble plus répondre à ton attente.
--
<=- Michaël "Cortex" Monerau -=>
|
|
| Back to top |
|
 |
Michaël Monerau Guest
|
Posted: Fri Sep 05, 2003 4:31 pm Post subject: Re: variable membre initialisable mais non modifiable |
|
|
Michaël Monerau wrote:
<snip>
Ma réponse s'applique bien sûr si ta valeur ne peut pas être déterminée au
moment de la liste d'initialisation Sinon, utilise bien sûr la liste
d'initialisation plutôt que de passer par ma solution template (comme
Laruent, Vincent et Christophe t'ont suggéré) C'est un peu le marteau
pour la mouche !
--
<=- Michaël "Cortex" Monerau -=>
|
|
| 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
|
|