Newsgroup: it.comp.lang.c++
Titolo: Richiamo metodo ::NomeMembroClasse

Cosa significa quando si richiama una funzione che inizia per
::NomeFunzione() ?
Io so che quando chiamo NomeClasse::NomeFunzione() richiamo una funzione che
si trovo nella classe specificata.

 si trova nella classe specificata.
Solo se tale funzione è definita come static. Altrimenti va invocata con
Istanza:NomeFunzione().
EMG

Richiami una funzione "globale" che non appartiene a nessuna classe.
Serve soprattutto quando devi chiamare una funzione globale che ha lo stesso nome di una funzione membro.
Ad es. "MyDialog" deriva da una MyWindow che ha un metodo "MessageBox", quindi...
MyDialog::Pippo()
{
   MessageBox("Ciao"); // Chiamo il metodo della classe
   ::MessageBox(NULL, ... "ciao", ...); // Chiamo la funzione globale
}
Personalmente quando chiamo le funzioni di sistema e tutte quelle che so essere globali uso sempre "::" davanti al nome per mettermi al riparo da eventuali modifiche alle classi e quindi alla comparsa di una funzione "omonima".
A presto,
Angelo.
----------
Cosa significa quando si richiama una funzione che inizia per
::NomeFunzione() ?
Io so che quando chiamo NomeClasse::NomeFunzione() richiamo una funzione che
si trovo nella classe specificata.





Ok, ora ho capito la differenza fra 

MiaIstanza::MioMetodo()  
e 
::
NomeMetodoGlobale()
Però che cosa è esattamente lo 

scope globale
? E cosa significa 
esattamente che una funzione è 
static
?
Ho capito che lo scope globale ha a 
che vedere con le 
funzioni 
globali
... però cosa è esattamente?
Ho anche capito che una 
funzione static non può avere 
istanze
... ho capito bene?
Vi 
faccio queste domande perchè nel libro che ho comprato sul Visual C++ c'è 
molto "Visual" e poco C++
Il libro è 
Visual C++ 6 Guida 
Completa
 di Davis Chapman 
SAMS 
publishing
 
(APOGEO) L. 69.000 (circa 650 pagine).
Penso 
sia uno dei migliori libri sul Visual C++


In fondo c'è un'appendice che spiega alcuni argomenti di C++ e 
soprattutto le classi...


Però essendo un appendicè non c'è tutto! Infatti o compri un 
libro che tratta molto di C++ e poco di Visual oppure uno che tratta molto di 
Visual e poco di C++        
Io ho 
preferito comprare questo dato che conosco già il C (NON C++) e volevo 
programmare in Visual C++
Grazie.




Scope sta approssimativamente per 'visibilita'. Se un'entita' (variabile, 
costante, definizione di tipo, etc) ha visibilita' da ogni punto del tuo 
codice, si dice comunemente 'globale'.
'static' e' un modificatore che ha effetto diverso in contesti diversi. 
Traslasciando quelli tipici del C, che gia' conosci, un membro statico di una 
classe e' un membro che esiste a livello di classe, senza essere posseduto da 
una specifica istanza; di conseguenza, e' accessibile senza riferirsi ad 
un'istanza vera e propria (da cui la notazione NomeClasse::NomeMembro per 
riferircisi), e il suo valore e' "condiviso" da tutte le (eventuali) istanze 
della classe.
Ad esempio se dichiari
class C { public: static int foo; };
"foo" sara' accessibile senza dover passare per una specifica istanza di C - 
mediante la notazione C::foo. (intuitivamente, l'allocazione di memoria per 
"foo" sara' effettuata una volta sola al bootstrap, mentre per un membro 
nonstatico avviene alla new).
Naturalmente, cio' non toglie se crei un oggetto di classe C puoi riferirti 
tranquillamente a "foo" con la solita notazione a punto (o la sua variante a 
freccia se usi un puntatore), come in 
    	new C->foo=5; 
Tieni presente pero' che "foo" continua a essere statico - ne esiste un'unica 
istanza - quindi il suo valore viene modificato per "tutte" le istanze 
presenti.
Per "membro statico" si intende qualunque membro, quindi anche un metodo: un 
metodo statico sara', al solito, richiamabile senza una specifica istanza, e il 
codice nel suo body si potra' riferire, per ovvie ragioni, solo ad altri membri 
statici e inoltre non puo' usare this (dato che non c'e', per definizione, un 
"oggetto corrente" su cui si sta invocando il metodo, this non puo' essere 
passato al metodo stesso).
-- 
God is Real, unless declared Integer.

 Ho anche capito che una funzione static non può avere istanze...
Una classe può avere istanze, una funzione no indipendentemente se sia
static o meno.
EMG