|
|||||||
|
|
|
![]() |
|
|
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: 10:09.




















