Attribut partageable par les méthodes

nad -  
 nad -
Bonjour,

Comment déclarer un attribut dans une classe pour que sa valeur soit modifiable par toutes les méthodes d'une classe et il se réinitialise pour les autres instances de cette classe ?
J'ai essayé de le déclarer static, mais le problème est que sa valeur devient partagée par toutes les instances de la classe ce qui n'est pas ce qui est demandé.

Merci pour votre aide.

2 réponses

Marco la baraque Messages postés 1030 Statut Contributeur 329
 
Bonsoir,
Quel langage utilises-tu ?
Normalement en utilisant un attribut normal, il est visible par toutes les méthodes de la classe, appartient à l'instance courante (donc si tu crées une seconde instance, son attribut aura une autre valeur).

Cordialement,
0
nad
 
bonsoir
j'utilise c++ et lorsque j'utilise un attribut normal sa valeur reste partageable par toutes les instances .
0
Marco la baraque Messages postés 1030 Statut Contributeur 329 > nad
 
Peux-tu nous afficher ici le code de ta classe stp?
En principe ton attribut n'est partagé entre toutes tes classes que s'il est static, c'est pour ça que j'aimerais voir ce qui cloche.

Cordialement,
0
nad > Marco la baraque Messages postés 1030 Statut Contributeur
 
merci pour ta réponse mais le code de ma classe est trop trop long et ne peut pas etre affiché, mais je vais t'expliquer un peu :j'ai une classe ayant comme paramètre une variable de type entier et j'ai différents méthodes, qui lorsque une certaine condition soit vérifiée, mon attribut doit s'incrémenter.
Lors de l'exécution, il va y avoir plusieurs entiers, chacun d'eux va etre le paramètre de ma classe ,qui va etre donc appelée en parallèle par ces différents entiers.
Ce qui arrive est que par exemple , lors du premier appel de la classe mon attribut sort avec la valeur 2 par exemple, pour le second appel de cette classe par un 2ème entier mon attribut s'incrémente et devient 3, or je veux qu'il soit indépendant de la valeur qu'il a eu avec le premier entier.
0
Marco la baraque Messages postés 1030 Statut Contributeur 329
 
Tu dois avoir fait une erreur, je ne sais pas où... Regarde un peu le code suivant : l'attribut est bien relatif à l'instance :
Fichier Compteur.cpp : 
class Compteur {

int valeur;

public:
 Compteur(){}      
 Compteur(int valeur):valeur(valeur){}
 ~Compteur(){}
 
 void incremente() {valeur++;}
 
 int getValeur() {return valeur;}
 
};


Fichier main.cpp : 
#include <cstdlib>
#include <iostream>

#include "Compteur.cpp"

using namespace std;

int main(int argc, char *argv[])
{
   Compteur *c1 = new Compteur(2);
   c1->incremente(); //l'attribut valeur de c1 vaut 3
   std::cout<<c1->getValeur()<<std::endl;
   
   Compteur *c2 = new Compteur(5);
   c2->incremente(); //l'attribut valeur de c2 vaut 6
   std::cout<<c2->getValeur()<<std::endl;
   c1->incremente(); //l'attribut valeur de c1 vaut 4
   std::cout<<c1->getValeur()<<std::endl;
   
   delete c1;
   delete c2;
   
   system("PAUSE");
   return EXIT_SUCCESS;
}



Dis-moi donc la différence entre ton code et le mien, qu'on découvre d'où vient le problème.

Cordialement,
0
nad
 
bonjour ,
moi j'ai presque ça:
dans Compteur.h:

class Compteur : public A{
int val;
}

Dans compteur.cc j'ai:
int nombre;
compteur::compteur(int val):A
{}

void init()
{nombre=0;}
void incrementer()
{nombre ++}
et puis il y a d'autres classes qui vont appeler Compteur suivant des valeurs différentes de val.
merci de ton aide.
0