|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] costruttori
Allora: io conosco tre tipi di costruttori:
Codice:
quello generico con nomeclasse(); quello di default: nomeclasse(int x, int y ,int z); e quello di copia: nomeclasse(nomeclasse &x); Inoltre: perchè alcune volte viene implementato cosi? Codice:
nomeclasse(.........) : x=val, y=z; { } |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Codice:
class MyClass { private: int a; public: MyClass() { } }; MyClass mc; // OK, posso farlo perchè c'è il costruttore di default Codice:
class MyClass { private: int a; public: MyClass(int aa) : a(aa) { } }; MyClass mc; // NON COMPILA: non è stato esplicitamente dichiarato un costruttore di default, e avendone specificato un altro, il compilatore non me lo ha sintetizzato Il copy constructor prende come argomento una const nomeclasse&, non una nomeclasse&. Questo costruttore viene sempre sintetizzato dal compilatore se non lo dichiari esplicitamente. Così come il distruttore. Serve per poter scrivere: Codice:
MyClass a; MyClass b = a; MyClass c(b); La seguente sintassi: Codice:
class MyClass { private: int a; public: MyClass(int aa) : a(aa) { } } Codice:
class MyClass { private: int a; public: MyClass(int aa) { a = aa; } } |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Il primo, come già detto, viene quasi sempre esplicitato per poter dichiarare un oggetto di tale classe senza specificare argomenti, e poter scrivere "MyClass a;" Quello di copia viene spesso esplicitato perchè permette di scrivere "MyClass a = b;" (dove b è di classe MyClass, ovviamente), che è un operazione altamente frequente. Nota bene che quello di copia dovrebbe di norma copiare il valore dei membri da un oggetto a quello nuovo, tutto qui, quindi la logica di funzionamento è sempre la stessa e il compilatore è in grado di sintetizzarlo per questo motivo. Quindi normalmente anche quando viene esplicitato, non fa altre cose oltre a questo, ma c'è chi potrebbe desiderare di aggiungere altre logiche di funzionamento. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
bene...ho capito!
mentre quello generico? può fare operazioni varie in pratica :-) questo costruttore inizializzato...perchè viene inizializzato cosi? Codice:
Time::Time( int hr, int min, int sec ) : h(hr), m(min), s(sec) { } e non cosi?? [code] Time::Time( int hr, int min, int sec ){ h(hr), m(min), s(sec) } |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Inzializzazione e assegnamento non equivalgono?
Ora riguardo Inviato dal mio GT-I9003 usando Tapatalk |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:24.