PDA

Visualizza la versione completa : [C++] Accesso alle funzioni di una classe senza istanziarla


fbcyborg
20-12-2011, 12:54
Salve a tutti,

è possibile accedere alle funzioni membro di una classe, senza doverla istanziare?

Ad esempio in Java se definisco un metodo "static", posso accedervi da altre classi, in questo modo:

NomeClasse.nomeMetodo();

Siccome in c++ mi pare di capire che static ha un altro significato (e sinceramente ho ancora un po' di confusione in testa), vorrei capire come si può ottenere lo stesso risultato in c++.

Se provo a fare in quel modo, come faccio in Java, la funzione non mi viene vista.

La mia inesperienza mi fa bloccare a questo punto.

:messner:

ramy89
20-12-2011, 13:06
Usi la sintasi NomeClasse::Nomemetodo();
Ti faccio un esempio:


using namespace std;

class C
{
public:
static void stampa1();
void stampa2();
};

void C::stampa1(void)
{
cout<<"ciao"<<endl;
}

void C::stampa2(void)
{
cout <<"ciao di nuovo"<<endl;
}

int main(int argc, char **argv)
{
C::stampa1();
C::stampa2(); // errore
return 0;
}

fbcyborg
20-12-2011, 13:33
Grazie!!!

Una domanda: ho visto che hai messo la parola static nell'header dove dichiari i prototipi, nella funzione stampa1, ma non l'hai poi riscritto nell'implementazione della funzione.
Si può/deve omettere oppure è una tua dimenticanza?

Grazie ancora!

:ciauz: :unz:

oregon
20-12-2011, 14:59
No ... non lo devi scrivere.

fbcyborg
20-12-2011, 15:00
OK, grazie!

ramy89
20-12-2011, 15:02
Originariamente inviato da fbcyborg
Grazie!!!

Una domanda: ho visto che hai messo la parola static nell'header dove dichiari i prototipi, nella funzione stampa1, ma non l'hai poi riscritto nell'implementazione della funzione.
Si può/deve omettere oppure è una tua dimenticanza?

Grazie ancora!

:ciauz: :unz:

Se lo dichiaro così:



static void C::stampa1(void)
{
cout<<"ciao"<<endl;
}


Il compilatore da errore, anche se non so il motivo.
Forse per convenzione si è stabilito che un metodo statico va dichiarato tale solo nelle firme dei metodi della classe, magari per non creare confusione.

fbcyborg
20-12-2011, 15:05
Ok, buono a sapersi, almeno non impazzisco con questo! :)

:yuppi:

Loading