Faire des membres d'une classe en "lecture seule"

Faire des membres d'une classe en "lecture seule" - C++ - Programmation

Marsh Posté le 30-06-2005 à 01:24:02    

Bien le bonsoir
 
Ma question : comment faire en sorte que des variables membres d'une classe ne soit accessibles qu'en "lecture seule" au reste du programme (!= private, != public) ?
Est-ce possible ou faut-il vraiment faire une fonction publique par variable privée pour pouvoir lire cette dernière ?
 
Bien le merci :)

Reply

Marsh Posté le 30-06-2005 à 01:24:02   

Reply

Marsh Posté le 30-06-2005 à 02:04:34    

Il faut un accesseur par variable.

Reply

Marsh Posté le 30-06-2005 à 09:37:38    

Code :
  1. class Baz {};
  2. class Foo {
  3.   int _bar;
  4.   Baz _baz
  5. public:
  6.   int bar() const {return _bar;};
  7.   const Baz &baz() const {return _baz;};
  8. };

Reply

Marsh Posté le 30-06-2005 à 09:39:02    

ou alors à la java, tous les membres en privés/protégés et des getters/setters (que des getters pour les membres en lecture seule)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 09:42:06    

un getter/setter en Java, ça protège queudalle si tu renvoies pas une copie.

Reply

Marsh Posté le 30-06-2005 à 09:52:22    

Tiens, je viens de penser à un truc:

Code :
  1. class A
  2. {
  3. public:
  4.     const int & Value;
  5.     A() : Value( value_ )
  6.     {
  7.     }
  8. private:
  9.     int value_;
  10. };


:gratgrat:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-06-2005 à 10:01:27    

Taz a écrit :

un getter/setter en Java, ça protège queudalle si tu renvoies pas une copie.


Heuu le getter par définition il va envoyer une copie ou un const, sinon le setter ne sert à rien [:pingouino]
 
Un peu [:pingouino]
 
Quoi [:pingouino]


Message édité par masklinn le 30-06-2005 à 10:01:58

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 10:02:22    

ben non.
 
 
la const&, par forcément. Mais un const bien placé, ça peut le faire.

Reply

Marsh Posté le 30-06-2005 à 10:10:48    

HelloWorld a écrit :

Tiens, je viens de penser à un truc:

Code :
  1. class A
  2. {
  3. public:
  4.     const int & Value;
  5.     A() : Value( value_ )
  6.     {
  7.     }
  8. private:
  9.     int value_;
  10. };


:gratgrat:


 
dans le principe, ca me dérange un peu de faire une référence sur une variable qui n'est pas encore initialisée, sinon, ouais, ca me plait :D
 
Edit : (c'était juste pour dire que j'aurais déclaré value_ avant de déclarer Value, quoi)


Message édité par theshockwave le 30-06-2005 à 10:14:04
Reply

Marsh Posté le 30-06-2005 à 13:33:54    

A ouais, genre en mettant la définition de la fontion accesseure dans la def de classe, comme ça, si j'ai bien retenu ma leçon, elle devient inline, et on a pas de perte en performances.
?
 
Sinon une question totalement nioubie par rapport au truc de HelloWorld : ça veut dire quoi " A() : Value(value_) " ? Value n'est pas une fonction alors pourquoi ces parenthèses  ? Et les 2 points, c'est pour inclure une fonction dans une autre ? Ou bien ?

Reply

Marsh Posté le 30-06-2005 à 13:33:54   

Reply

Marsh Posté le 30-06-2005 à 13:54:39    

ca s'appelle un constructeur

Reply

Marsh Posté le 30-06-2005 à 14:02:49    

theredled a écrit :

c'est pour inclure une fonction dans une autre ? Ou bien ?


 
bien [:petrus75]
 
c'est l'initialisation de la donnée Value comprise dans l'objet faite proprement (pour une référence, tu ne peux pas faire autrement)

Reply

Marsh Posté le 30-06-2005 à 16:54:45    

Hmmm... une liste d'initialisation...  :o

Reply

Marsh Posté le 30-06-2005 à 17:03:15    

bah, oui, tu peux aussi chainer les initialisations en les séparant par des virgules. Note qu'il est plutôt conseillé de réaliser les initialisations dans l'ordre de déclaration des membres de ta classe si tu ne veux pas avoir d'ennuis ...

Reply

Marsh Posté le 30-06-2005 à 17:37:58    

ok merci messieurs

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed