Salut!

Lorsque on écrit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A{
public:
       int n;
       A(int m):n(m){}
       void f(){
            static int i=0;
            std::cout<<"Instance : "<<n<<" , i vaut : "<<i<<std::endl;
            i++;
            }
};
 
int main(void)
{
A a1(1),a2(2);
a1.f();
a2.f();
les 2 instances de la classe A, a1 et a2, ont accés à la même donnée static "i" qui est pourtant dans une méthode qui est propre à chaque instance.
"i" est "static" par rapport à la classe et à le même comportement que dans le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
class A{
public:
       static int i;
       int n;
       A(int m):n(m){}
       void f(){
            std::cout<<"Instance : "<<n<<" , i vaut : "<<i<<std::endl;
            i++;
            }
};
int A::i=0;

Donc 2 questions:
1)Pourquoi les concepteurs du langage ont ils implémenté ce comportement qui peut sembler paradoxal : un comportement "static" dans une méthode propre à chaque instance?
2)Comment faire alors pour avoir 2 instances d'une classe qui accèdent à une donnée "static" par rapport à une méthode, mais pas par rapport à la classe, chaque instance ayant sa propre donnée "static"?

Merci de vos réponses.