|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[c++] costruttore con :
Qualcuno mi spiega questo tipo di costruttore come funziona?
Codice:
Prodotto(string n, string m) : nome(n), marca(m) { }
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
se non ricordo male quello specifico costrutto server per inizializzare delle costanti membro
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Non ho capito
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Codice:
class A
{
int a;
const int b;
// Costruttore sbagliato: non compila
A(int aa, int bb)
{
a = aa;
b = bb;
}
// Costruttore giusto: compila
A(int aa, int bb) : b(bb)
{
a = aa;
}
}
Dato che b è const, non puoi assegnarle un valore scrivendo b = bb. Fin qui tutto chiaro. Per questo il primo costruttore NON compila. Ma allora, come le assegno un valore? Tutte le variabili const possono, e devono, essere inizializzate con un valore in fase di costruzione (quando vengono create in memoria). Quindi, quando io sto costruendo un oggetto di una classe, viene riservata una zona di memoria adatta a contenerlo e le variabili membro possono essere inizializzate. Per farlo, usi la sintassi di inizializzazione (quella con : ), cioè tutte le variabili membro scritte dopo : e prima del corpo del costruttore vengono inizializzate. Qui devi assegnare un valore alle variabili membro che sono const. Solo DOPO la costruzione dell'oggetto viene eseguito il corpo del costruttore, quindi è per questo che i membri const non possono essere assegnati nel corpo del costruttore. In breve: usando l'inizializzazione, le variabili membro sono inizializzate contestualmente alla creazione dell'oggetto di quella classe; il corpo del costruttore viene eseguito dopo la creazione dell'oggetto, quindi è come chiamare una funzione membro su un oggetto già costruito. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Pertanto la "Lista di Inizializzazione" (così viene chiamata) serve per specificare dei costruttori alternativi a quelli di default. Questo cosa significa? Beh, essenzialmente che se hai dei tipi definiti come costanti l'unica possibilità per modificare il loro valore è all'interno di questa lista di inizializzazione, altrimenti nel corpo del costruttore non potrai farlo. Altra motivazione è il voler evitare che il costruttore di default venga chiamato (questo può essere utile nel caso il costruttore di un determinato tipo sia particolarmente esoso a livello di risorse e pertanto preferisci chiamare il costruttore solo una volta). |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Ho capito ora. E ho visto alcuni esempi in cui mettono il costruttore della classe base dopo i :
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:31.



















