PDA

View Full Version : [C++] Inizializzazione membri


71104
28-10-2006, 14:54
quanlcuno ricorda la sintassi per inizializzare i membri di una classe nel costruttore prima del blocco di codice? io ho un vago ricordo che bisognasse mettere i due punti subito dopo i parametri nell'implementazione del costruttore, poi le inizializzazioni ed infine il blocco di codice, ma non ricordo di preciso. il problema è che una mia classe contiene un membro di tipo CSocket& (cioè un reference), che chiaramente va inizializzato subito per forza. come faccio? grazie.

jappilas
28-10-2006, 15:02
quanlcuno ricorda la sintassi per inizializzare i membri di una classe nel costruttore prima del blocco di codice? io ho un vago ricordo che bisognasse mettere i due punti subito dopo i parametri nell'implementazione del costruttore, poi le inizializzazioni ed infine il blocco di codice, ma non ricordo di preciso. il problema è che una mia classe contiene un membro di tipo CSocket& (cioè un reference), che chiaramente va inizializzato subito per forza. come faccio? grazie.
io mi ricordo:
Classe::Classe( argomenti) throw(tipo_exception) //eccezione facoltativa :asd:
: Eventuale_Classe_Base(argomento),
membro1(valore1), //virgola
membro2(valore2),
...,
membroN(valoreN)
{
corpo del costruttore
}

tomminno
28-10-2006, 18:47
io mi ricordo:
Classe::Classe( argomenti) throw(tipo_exception) //eccezione facoltativa :asd:
: Eventuale_Classe_Base(argomento),
membro1(valore1), //virgola
membro2(valore2),
...,
membroN(valoreN)
{
corpo del costruttore
}

Occhio che in C++ è pericoloso dichiarare il tipo di eccezioni sollevato, se per caso te ne viene fuori un'altra il programma termina.
Comunque il modo di inizializzare è corretto e prende il nome di lista di inizializzazione.

zakmckraken
28-10-2006, 19:46
Ciao a tutti!!!
Pero'non e'che sia tanto bello usare il costruttore per eseguire delle azioni non di inizializzazione, di solito le ho solo viste per inizializzare le variabili membro... p.e. in MFC s'ha sempre da chiamare la Create(...) per eseguire "veramente" delle azioni :confused:

jappilas
28-10-2006, 22:28
Occhio che in C++ è pericoloso dichiarare il tipo di eccezioni sollevato, se per caso te ne viene fuori un'altra il programma termina.
Comunque il modo di inizializzare è corretto e prende il nome di lista di inizializzazione.
sì lo so ;)
ho spulciato del mio vecchio codice alla ricerca del costruttore più completo per postarne la struttura generalizzata, ma l' eccezione in origine era tipizzata e gestita dal (per molti motivi "mitico" :asd: ) framework di appoggio ;)

jappilas
28-10-2006, 23:42
Ciao a tutti!!!
Pero'non e'che sia tanto bello usare il costruttore per eseguire delle azioni non di inizializzazione, di solito le ho solo viste per inizializzare le variabili membro... p.e. in MFC s'ha sempre da chiamare la Create(...) per eseguire "veramente" delle azioni :confused:
membro(valore) è un' inizializzazione diretta per valore costante :read:
la chiamata al costruttore della superclasse è necessaria, altrimenti dubito i dati membri privati ereditati si possano inizializzare autonomamente :asd:
un "corpo" non banale per il costruttore serve anche se si tratta solo di inizializzazioni: in quella classe c' era un parametro stringa da formattare in modo differenziato, lo avrei potuto mettere fuori dal corpo del metodo ? :asd: