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

membre de classe static ?

4 réponses
Avatar
AG
Bonjour,

Je voudrais créer une classe dans laquelle il y aurait un membre statique :

Classe RandInt
{
unsigned long int seed;
public:
RandInt(unsigned long int s=0) : seed(s) {seed=s;};
unsigned long int operator() (void);
unsigned long int GetSeed(void) {return seed;};
}


dans cette classe, j'aimerais que le membre seed soit commune à toutes
les instances de cette classe.

si par exemple operator() était implémenté comme ceci :

unsigned long int RandInt::operator() (void)
{
seed++;
}

je voudrais que :

RandInt a=RandInt(0);
RandInt b=RandInt(0);

a();
b();

cout<<a.GetSeed() << "\n";
cout << b.GetSeed() << "\n";

m'affiche 1 puis 2.

J'ai essayé d'utiliser un pointeur pour seed, mais je me heurte à des
problème des constructeurs/desctructeurs. Je n'ai pas l'impression que
ça soit une solution. Je vois bien une solution sans utiliser les
constructeurs/desctructeurs, mais ça me parait pas propre.

J'ai essayé de mettre seed en membre statique, mais ça ne lie pas (par
contre ça compile (VC++6.0). (j'ai changé le constructeur bien sur)

J'ai lu dans mon livre que je pouvais créer une classe spéciale pour ma
seed, et que je devais mettre cette classe en statique dans ma classe
RandInt. J'ai aussi cru comprendre que c'était un peu de la magouille.
Comment fait on concrêtement, et de manière plus ou moins portable ?

En espérant être assez clair.

AG.

4 réponses

Avatar
Ivan Vecerina
"AG" wrote in message
news:4211feb0$0$3807$
Bonjour,

Je voudrais créer une classe dans laquelle il y aurait un membre statique
:

Classe RandInt
{
unsigned long int seed;
public:
RandInt(unsigned long int s=0) : seed(s) {seed=s;};
unsigned long int operator() (void);
unsigned long int GetSeed(void) {return seed;};
}


dans cette classe, j'aimerais que le membre seed soit commune à toutes les
instances de cette classe.
...

J'ai essayé de mettre seed en membre statique, mais ça ne lie pas (par
contre ça compile (VC++6.0). (j'ai changé le constructeur bien sur)


Il faut écrire:
Classe RandInt
{
static unsigned long int seed;
....

Puis dans l'implémentation (.cpp), pour que ça lie correctement:
unsigned long int RandInt::seed = 0;

En espérant être assez clair.
En espérant que ça fasse l'affaire ;)

Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form

Avatar
AG
Ivan Vecerina wrote:


Il faut écrire:
Classe RandInt
{
static unsigned long int seed;
ok, j'ai fait ça.


....

Puis dans l'implémentation (.cpp), pour que ça lie correctement:
unsigned long int RandInt::seed = 0;
Dans quel bloc ? Juste dans le .cpp, en dehors de toute fonction ?

Ais-je le droit d'accéder à seed de cette manière si celle-ci est un
membre privée ?

AG.

Avatar
xavier
AG a dit le 15/02/2005 15:31:
Dans quel bloc ? Juste dans le .cpp, en dehors de toute fonction ?


Oui.

Ais-je le droit d'accéder à seed de cette manière si celle-ci est un
membre privée ?


Il s'agit de la définition de la variable, pas d'un accès.

xavier

Avatar
AG
xavier wrote:
AG a dit le 15/02/2005 15:31:

Dans quel bloc ? Juste dans le .cpp, en dehors de toute fonction ?



Oui.

Ais-je le droit d'accéder à seed de cette manière si celle-ci est un
membre privée ?



Il s'agit de la définition de la variable, pas d'un accès.

xavier
Merci.