Classi e Puntatori

di Anonimizzato16751 il
5 risposte
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

  • 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).
  • 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?
  • Indica che la funzione in questione non andrà a modificare alcuna variabile d'istanza della classe a cui appartiene.
  • 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;
    }
  • 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