PDA

Visualizza la versione completa : [C++] Costruttori e loro utilizzo


kythera
13-02-2012, 11:27
Salve a tutti!
E' da qualche settimana che ho cominciato a mettere le mani sul C++, avendo conoscenze solo di C.
Quindi alcune cose fatico ancora a comprenderle.

Vi posto un esercizietto idiota, ma che mi dà da riflettere...



class C {
private:
int x;
public:
C(int n=0) {x=n;}
C F(C obj) {C r; r.x=obj.x+x; return r; }
....
};

int main() {
C x, y(1), z(2); const C v(2);
z=x.F(y);
...
}


Bene, primo dubbio.
L'unico costruttore dichiarato nella classe è ad un parametro (con argomento di default), quindi non dovrei più avere a disposizione il costruttore standard. Giusto?
Non capisco perché la dichiarazione C x nel main sia corretta.
Non dovrei poterla fare solo se ho a disposizione un costruttore di default, o comunque standard?
Probabilmente sto facendo confusione...

Ultima cosa: l'istruzione nel main x.F(y) cosa fa esattamente?
Applica il metodo F sull'oggetto di invocazione x. Non capisco però che ruolo svolga poi x nell'esecuzione del metodo.
Qualcuno sa spiegarmi, in parole povere, cosa accade con quell'istruzione?

Grazie :)

kythera
13-02-2012, 14:44
Provo ad essere più specifica, visto che nessuno si lancia!

Riguardo al primo dubbio:
se il costruttore fosse stato sempre ad un parametro, SENZA però argomento di default, quindi una cosa tipo C(int n) {x=n;}, l'istruzione nel main C x sarebbe stata illegale?
Se la risposta a questa domanda è si, allora ho risolto il problema.

Per il secondo dubbio:
credo di aver sbrogliato quali campi dati di quali oggetti vengono settati e come... e nella funzione F il campo dati x dell'oggetto r dovrebbe valere 1, se il mio ragionamento è corretto.
Mi chiedo però cosa dovrebbe ritornare esattamente il comando "return r", sempre nel corpo di F. Ritorna il campo dati x di r? Non credo proprio...


Grazie ancora :D

oregon
13-02-2012, 14:57
Il fatto è che hai scritto

C(int n=0) {x=n;}

rendendo il parametro "opzionale" e quindi accettando implicitamente che non esista.

Se scrivessi

C(int n) {x=n;}

avresti dei problemi

ramy89
13-02-2012, 15:00
C F(C obj) {C r; r.x=obj.x+x; return r; }


Ritorna un oggetto di tipo C, il parametro obj serve per settare il campo x dell' oggetto che verrà ritornato.

kythera
13-02-2012, 15:08
Originariamente inviato da oregon
Il fatto è che hai scritto

C(int n=0) {x=n;}

rendendo il parametro "opzionale" e quindi accettando implicitamente che non esista.

Se scrivessi

C(int n) {x=n;}

avresti dei problemi

Chiarissimo, grazie!

Loading