Newsgroup: it.comp.lang.c++
Titolo: Variabili statiche nei metodi delle classi

Mi è capitato più volte di utilizzare variabili statiche all'interno di
metodi di una classe e non ho mai trovato il modo di usarle come si usano
nelle funzioni normali al di fuori delle classi.
Mi spiego meglio: ogni istanza della classe condivide sempre la stessa
funzione statica, anche se è dichiarata all'interno di una funzione membro.
Di seguito ho riportato un facile esempio per capire meglio: col mio Dev-C++
l'output dei due programmini qui sotto è esattamente lo stesso.
Capisco che questo possa servire per comunicare tra più istanze della stessa
classe, ma è possibile che io sia costretto a dichiarare private anche le
variabili statiche di servizio che uso all'interno di un metodo, per far sì
che ogni istanza della classe ne veda una diversa?
=====================================================================
#include <iostream>
using namespace std;
#define CLASS_NUMBER 1 //LINEA DA ELIMINARE PER SELEZIONARE A-1 O A-2
#ifdef CLASS_NUMBER
class A    // E' LA CLASSE A-1
{
static int N;
public:
int Display() {N++;cout<<"A-1  "<<N<<endl;}
};
int A::N=0;
#else
class A   // E' LA CLASSE A-2
{
public:
int Display() {static int N=0;N++;cout<<"A-2  "<<N<<endl;}
};
#endif
int main()
{
A B,C;
B.Display();
C.Display();
getchar();  //ASPETTA PRIMA DI USCIRE
}

 metodo, per far sì che ogni istanza della classe ne veda una diversa?
Forse non ho capito la domanda ma... se vuoi una distinta variabile per ogni 
istanza e vuoi che il suo valore si conservi tra successive chiamate di un 
metodo, non va bene una normale variabile (non statica) all'interno della 
classe?
C'è un motivo particolare per cui vuoi mettere la variabile nel metodo 
anzichè nell'istanza?
-- 
"Any sufficiently advanced technology is indistinguishable from magic."
                                                            Arthur C. Clarke

Mi piacerebbe vedere questo output, perché con me non ho un compilatore.
Inoltre non ho capito cosa avresti voluto fare con le variabili statiche
all'interno di una classe, o di un metodo.


Sostanzialmente l'output è:
PROG.1:
A-1: 1
A-1: 2
e PROG.2:
A-2: 1
A-2: 2
Comunque a me sembrava chiara la mia osservazione:
Se ho bisogno di una variabile che uso solo all'interno di un metodo e che
non viene mai usata fuori da quel metodo, e che deve mantenere memoria del
suo valore, ma deve essere diversa per ogni istanza della classe, sono
costretto a dichiararla private, a farla condividere a tutti gli altri
metodi, e ad avere molta fantasia per fare in modo che i nomi di queste
variabili in metodi diversi siano sempre diversi...

 variabili in metodi diversi siano sempre diversi...
Non vedo perchè tu sia "costretto", mettila come variabile private 
dell'istanza, al di fuori del metodo X in questione, ed usala poi solo in 
quel metodo X.
La classe la stai scrivendo tu, chi altro potrà mai usarla?
8-)


Ricordi di avere avuto un problema simile all'interno di una metodo che
consiste in una macchina a stati.. Non ricordo se il problema fosse dovuto
ad un problema di accesso alla memoria da parte di qualche puntatore, ma ho
risolto il problema rendendo N privata. Come sempre sono in difficoltà a
dirtì di più perchè sono a lavoro.
