Classi e Puntatori

di il
5 risposte

Classi e Puntatori

Salve,
per una esercitazione devo creare una classe "Persona" in C++ che ha come campi "nome" e "cognome". Fra i metodi OBBLIGATORI da implementare c'è il metodo Get così definito:
void Get(string *nome, string *cognome) const;
Quello che non capisco però è perché nome e cognome sono dei puntatori e quindi non saprei esattamente come implementarla. Qualcuno può aiutarmi?

5 Risposte

  • Re: Classi e Puntatori

    Questo metodo, piuttosto che ritornare il valore delle stringhe, le pone all'interno di quelle puntate. Un utilizzo è:
    string nome, cognome;
    get(&nome, &cognome);
    I puntatori sono necessari, altrimenti non potresti modificare tali stringhe (o quantomeno dovresti utilizzare le references).
  • Re: Classi e Puntatori

    Ti ringrazio per la risposta. Ho implementato il metodo così:
    void Persona::Get(string *nome, string *cognome) const
    {
        *nome=name;
        *cognome=surname;
    }
    dove "name" e "surname" sono i due campi privati della classe.

    Un'ultima domanda, cosa vuol dire il const finale nella dichiarazione del metodo?
  • Re: Classi e Puntatori

    Indica che la funzione in questione non andrà a modificare alcuna variabile d'istanza della classe a cui appartiene.
  • Re: Classi e Puntatori

    tuixte ha scritto:


    Questo metodo, piuttosto che ritornare il valore delle stringhe, le pone all'interno di quelle puntate. Un utilizzo è:
    string nome, cognome;
    get(&nome, &cognome);
    I puntatori sono necessari, altrimenti non potresti modificare tali stringhe (o quantomeno dovresti utilizzare le references).
    Se posso fare un'altra domanda su questa questione, ho provato ad utilizzare tale metodo in questo modo:
    string *nome, *cognome;
    p3.Get(nome, cognome);
    riesco a compilare però l'esecuzione mi crasha e non capisco perché. Infatti, se ho capito bene, quello che dovrebbe fare è creare inizialmente due puntatori che non puntano a nulla. porli come argomento del metodo Get ed infine farli puntare rispettivamente ai due campi privati della classe.

    L'implementazione del metodo è sempre:
    void Persona::Get(string *nome, string *cognome) const
    {
        *nome=name;
        *cognome=surname;
    }
  • Re: Classi e Puntatori

    Crasha perché in quel modo hai solamente il puntatore ma non hai l'oggetto.

    Non fai "puntare" ma copi il contenuto dell'oggetto privato nell'oggetto passato per puntatore.
Devi accedere o registrarti per scrivere nel forum
5 risposte