Originariamente inviato da zuffff
funziona tutto. grazie. ma che vuol dire
explicit nella classe vettore?
Explicit indica un costruttore esplicito.
E' un concetto un po difficile da spiegare.
Un costruttore che usa argomenti può essere soggetto a conversioni implice dal compilatore. Praticamente un tipo di dato inserito in un costruttore, magari se questo non è appropriato, può essere implicitamente convertito in un tipo di oggetto idoneo per il costruttore.
Mettiamo caso di avere una classe che prende come costruttore un int
codice:
class MiaClasse
[
MiaClasse();
MiaClasse(int i = 10);
];
Mettiamo ora caso di avere una funzione che invece prende una istanza di questa tua classe
codice:
void Print(MiaClasse &cls);
Adesso, metti il caso in cui tu stai scrivendo del codice con queste due definizioni e utilizzi in modo sbagliato la funzione print
Come puoi vedere è sbagliato in quando Print vuole una istanza di MiaClasse mentre tu gli hai appena passato un intero.Cosa fa il compilatore? dato che il costruttore della MiaClasse prende un intero, crea una classe MiaClasse al volo utilizzando come costruttore il parametro che gli hai passato (in questo caso 15) e la utilizza per la funzione print.
Ciò può essere molto confusionario e dunque si utilizzano i costruttori explicit.
Mettendo explicit prima di un costruttore di una classe vuol dire che il costruttore vuole solo un parametro reale e niente conversioni implicite e quindi implica il passaggio di parametri corretti.
Se il costruttore fosse stato cosi
codice:
explicit MiaClasse(int i = 10);
Chiamando la funzione Print(15) il compilatore ti avrebbe dato un errore.