Newsgroup: it.comp.lang.c++
Titolo: dubbio classi

ho fatto questa prova volevo sapere
se è normale ho sbaglio qualcosa.
class ClasseProva
{
  int a;
  int b;
  int myFunc();
};
int ClasseProva:myFunc()
{
 static int inc = 0;
 inc++;
}
int main()
{
  ClasseProva *a = new ClasseProva;
  ClasseProva *b = new ClasseProva;
  a->myFunc()
  a->myFunc()
  b->myFunc()
  b->myFunc()
  cout << a->myFunc() // questo mi restituisce 3 giustamente perche la
                                    // varibiale inc della funzione myFunc 
viene incrementata
                                   // 3 volte ovviamente.
  cout << b->myFunc() // questo mi restituisce 6
}
da quanto ho capito quando faccio un new di una nuova classe
non viene generata la memoria anche per una nuova copia della
funzione myFunc, come si fa per fare questa cosa?
grazie a tutti, spero di essere stato chiaro. 

 funzione myFunc, come si fa per fare questa cosa?
si usano i normali dati della classe, nella fattispecie:
class ClasseProva
{
	int a;
	int b;
	int inc;
	ClasseProva():
	inc(0)
	{}
	int
	myFunc()
	{ return inc++; }
};
-- 
"La pistola di Chuck Norris, dentro, non ha il tamburo. Ha il batterista 
dei Pantera."
"buuuhhhhhhhhhhrrrrrrr"


non ho capito bene la risposta, quindi non si puo' fare?
grazie ancora. 

 non ho capito bene la risposta, quindi non si puo' fare?
certo che si può fare, ma sto andando a intuito perchè non è ben chiaro 
che risultato tu voglia ottenere



ti ringrazio per la risposta, infatti non sono stato chiaro, vorrei
che la variabile inc non continuasse ad aumentare quando
chiamo 2 instanze diverse, ho capito che con il codice che
mi hai posta tu funziona, ma io ho necessità di farlo
nell'altro modo e cioè vorrei che quando faccio il new
di una classe copiasse in memoria una nuova funzione
di myFunc, vorrei in pratica che copiasse l'intera classe
come se fosse un'altra cosa. Per intenderci clonata
completamente compresa di funzione in un'altra di memoria.
scusa della poca chiarezza ma è da poco che lavoro con c/c++ 

 
scrivi l'output che vorresti per piacere, perchè non ci sto capendo 
niente. Il metodo che ho postato funziona? bene, quello è il metodo per 
fare *quello che ho capito* volessi fare tu, stop
-- 
"Quando Chuck Norris fa le flessioni, non alza sè stesso, abbassa la Terra."
"buuuhhhhhhhhhhrrrrrrr"

ti posto un nuovo codice con l'esempio
class Prova
{
  public:
  int myFunc(int num)
  {
     static int myVar = 0;
     if(num!=0)
        myVar = num;
     return myVar;
  }
};
int main()
{
    Prova *a = new Prova; // nuova instanza di classe a
    Prova *b = new Prova; // nuova instanza di classe b
    cout << a->myFunc(10); // questa correttamente ritorna 10
    cout << b->myFunc(0); // questa ritorna 10 "SBAGLIATO", dovrebbe ritorna 
0 se puntassi ad una nuova funzione di classe b
                                         // vorrei sapere quale è il metodo 
per farlo, di clonare tutta la classe compresa di funzione
}
ora credo chi si capisce bene il problema... grazie ancora.. 

 
sě, e lo risolvi precisamente con il codice che ti ho postato. D'altra 
parte, non capisco perchč tu voglia utilizzare per forza una variabile 
static per fare quello che non č previsto che faccia. Se hai bisogno di 
dati separati per ciascuna istanza di classe, significa precisamente che 
hai bisogno di una variabile membro *non* statica.
-- 
"Quando Chuck Norris fa le flessioni, non alza sč stesso, abbassa la Terra."
"buuuhhhhhhhhhhrrrrrrr"

 completamente compresa di funzione in un'altra di memoria.
L'operatore "new" non puo' creare codice, puo' solo creare dati.
In C++ standard non e' possibile in nessun modo creare codice in fase di 
esecuzione, e quindi, in particolare, non e' possibile creare funzioni.
Tutto il codice, e quindi anche le funzioni, vengono create solo in fase 
di compilazione.
Le variabili statiche non vengono duplicate dall'operatore "new".
Il numero delle variabili statiche (come dice il nome) e' determinato in 
fase di compilazione e non puo' essere variato in fase di esecuzione.
Per capire il C++ e' necessario avere ben chiara la differenza tra "fase 
di esecuzione" (in inglese "run-time") e fase di compilazione (in 
inglese "compile-time").
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila


grazie per l'accurata spiegazione, ho capito perfettamente.
Siete tutti molto gentili.