Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] Accesso alle funzioni di una classe senza istanziarla

    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.


  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Usi la sintasi NomeClasse::Nomemetodo();
    Ti faccio un esempio:
    codice:
    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;
    }

  3. #3
    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!


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... non lo devi scrivere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    OK, grazie!

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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!

    Se lo dichiaro così:

    codice:
    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.

  7. #7
    Ok, buono a sapersi, almeno non impazzisco con questo!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.