OVH Cloud OVH Cloud

compteur static

3 réponses
Avatar
ByB
Bonjour,

Dans un porgramme, j'ai une classe représentant une fenêtre avec des
données dedans. Je dois laisser à l'utilisateur la possibilité d'ouvrir
au plus trois fenêtres de ce type (par le biais d'un menu).
L'utilisateur ouvre les fenêtres une à une, jusqu'à 3 au maximum.

Il faut donc que je dispose d'un moyen de compter les fenêtres, et
aussi d'un moyen de les identifier, afin d'envoyer les bonnes données à
la bonne fenêtre.

Je pensais donc doter la classe d'un donnée statique (static int
compteur) capable de compter le nombre d'occurrences de la fenêtre et
de bloquer après la troisième.

Le problème est donc d'initialiser ce compteur. En clair, où faut il le
mettre à 0, avant de l'incrémenter à chaque ouverture de fenêtre ?

Merci de vos conseils.


--
Du fait de la crise conjoncturelle, il serait intéressant d'avoir à
l'esprit toutes les alternatives déjà en notre possession.

3 réponses

Avatar
Sylvain
ByB wrote on 01/06/2006 20:19:

Le problème est donc d'initialiser ce compteur. En clair, où faut il le
mettre à 0, avant de l'incrémenter à chaque ouverture de fenêtre ?

il faut simplement initialiser la donnée statique à zéro lors de sa

déclaration (dans le .cpp de la classe).

int MyClassWindow::refCounter = 0;

une donnée statique (globale ou d'une classe) à un espace réservé par le
linker lorqu'il assemble les morceaux, cet espace est ou non initialisé
selon les déclarations propres à chaque variable, si une variable l'est,
sa valeur est fixée à chaque demarrage de l'appli ou chaque chargement
de la librairie selon la nature du module de code.

Sylvain.

Avatar
ByB
J'ai envie de hurler à la face du monde que Sylvain a affirmé le
01/06/2006 que
ByB wrote on 01/06/2006 20:19:

Le problème est donc d'initialiser ce compteur. En clair, où faut il le
mettre à 0, avant de l'incrémenter à chaque ouverture de fenêtre ?

il faut simplement initialiser la donnée statique à zéro lors de sa

déclaration (dans le .cpp de la classe).

int MyClassWindow::refCounter = 0;

une donnée statique (globale ou d'une classe) à un espace réservé par le
linker lorqu'il assemble les morceaux, cet espace est ou non initialisé selon
les déclarations propres à chaque variable, si une variable l'est, sa valeur
est fixée à chaque demarrage de l'appli ou chaque chargement de la librairie
selon la nature du module de code.

Sylvain.


OK, merci.

--
LA FINALITE PONCTUE LES PROCESSUS FONDAMENTAUX DE LA DEMARCHE


Avatar
kanze
ByB wrote:

Dans un porgramme, j'ai une classe représentant une fenêtre
avec des données dedans. Je dois laisser à l'utilisateur la
possibilité d'ouvrir au plus trois fenêtres de ce type (par le
biais d'un menu). L'utilisateur ouvre les fenêtres une à une,
jusqu'à 3 au maximum.

Il faut donc que je dispose d'un moyen de compter les
fenêtres, et aussi d'un moyen de les identifier, afin
d'envoyer les bonnes données à la bonne fenêtre.


Au moins d'avoir beaucoup de fenêtres, un int me semble tout
indiqué pour le comptage. (Réalistiquement, je crois qu'on
pourrait même se passer des vérifications de débordement ici.)

Quant à l'identification, est-ce que le système ne t'en livre
pas un ? (Je sais que X/Windows le fait ; je ne me connais pas
aussi bien en MS-Windows.)

Je pensais donc doter la classe d'un donnée statique (static
int compteur) capable de compter le nombre d'occurrences de la
fenêtre et de bloquer après la troisième.

Le problème est donc d'initialiser ce compteur. En clair, où
faut il le mettre à 0, avant de l'incrémenter à chaque
ouverture de fenêtre ?


Toutes les variables statiques sont implicitement initialisées à
0, sans que tu ne le démandes. Pour d'autres valeurs (et souvent
pour 0 aussi, pour qu'on l'voit clairement), on met
l'initialisation dans la définition, exactement comme pour
n'importe quelle variable (locale ou d'autre).

--
James Kanze GABI Software
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