View Full Version : [c++] funzioni e classi
Ciao ragazzi,
vi sembrerà strano, pur avendo già affrontato le classi
(a livelli base però) ho incontrato per la prima volta una sintassi
in riferimento alle classi di questo genere:
void Cliente::inserisci_nome( )
che significa una funzione di questo tipo e a che serve?
io richiamo un metodo di una classe nel main utilizzando sempre il punto dopo avere instaziato l'oggetto (ho detto bene)
che differenza c'è?
grazie
/\/\@®¢Ø
27-04-2004, 21:21
L'operatore :: serve per dire "quello che viene dopo appartiene alla classe tal de tali".
Ad esempio si puo' utilizzare per definire un metodo fuori dalla dichiarazione della classe:
// in Foo.h
class Foo
{
void metodo()
{
cout << "ciao" << endl;
}
};
e' quasi equivalente e
// in Foo.h
class Foo
{
void metodo();
};
// in Foo.cpp
void Foo::metodo()
{
cout << "ciao" << endl;
}
Va notato che pero' le due notazioni non sono perfettamente identiche: nel primo caso il metodo viene automaticamente dichiarato inline (ovvero dove viene chiamato il metodo viene messo il codice stesso e non una chiamata a funzione) e nel secondo viene effettuata una separazione tra la l'interfaccia e l'implementazione.
Quello della definizione dei metodo non e' l'unico uso possibile di ::, si puo' utilizzare anche per indicare un metodo per passarlo come parametro ( &Foo::metodo e' un puntatore al metodo ), oppure per metodi/campi "di classe", cioe' riferiti alla classe stessa e non ad una particolare istanza.
In quest'ultimo caso un esempio potrebbe essere
class Foo
{
int id;
public:
static int next=0;
Foo();
};
Foo::Foo()
{
id = next++;
}
/* bla bla */
int main()
{
Foo x,y,z;
cout << Foo::next << endl; // stampa 3
}
Infine un ultimo utilizzo e' slegato dalle classi ma e' riferito ai namespace :
L'esempio principe e' quello della libreria standard, dove tutti gli elementi sono contenuti all'interno del namespace std.
Per poter utilizzare il canale cout ad esempio, bisogna specificare che si trova in std:
std::cout << "Hello world" << std::endl;
Anche se quasi sempre quello che si fa e' di importare tutto il namespace :
using namespace std;
cout << "Hello world" << endl;
Altrimenti nell'accezione classica del C serve per accedere allo scope globale da uno scope locale (utile in caso di funzioni o variabili locali ad una classe aventi lo stesso nome di una globale)...
int ciao = 0;
int main()
{
int ciao = 23;
cout << ciao << ::ciao << endl;
void f()
{
cout << "ciao1";
}
class a {
public:
void f() { cout << "ciao2"; };
a() { f(); ::f();}
};
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.