costruttore con un parametro di default
-
25-09-2019 - |
Domanda
Supponiamo che ho una classe
class C {
C(int a=10);
};
perché se chiamo
C c;
il C(int =10)
contructor si chiama e se chiamo
C c();
il costruttore di default si chiama? Come evitare questo? Voglio eseguire solo il mio costruttore, ho provato a fare il costruttore di default privato, ma non funziona.
Soluzione
- In realtà,
C c();
dovrebbe essere analizzato come un dichiarazione di funzione . Per esplicitamente invocare il default-costruttore, è necessarioC c = C();
scrittura. - Dopo aver definito alcun costruttore, il compilatore non fornire un default-costruttore per il vostro tipo, in modo che nessuno potrebbe essere chiamato.
- Dal momento che il costruttore può essere richiamato con un solo argomento, serve come una funzione di conversione implicita. Si dovrebbe considerare la possibilità di
explicit
, per evitare conversioni implicite da calci in momenti inaspettati.
Altri suggerimenti
Il codice di C c();
non fa quello che pensi lo fa:
Si dichiara una funzione chiamata c
che non accetta argomenti e restituisce un C
. È equivalente a
C c(void);
Questo perché il c()
viene interpretato come una funzione chiamata c
. C()
attiverà il costruttore appropriato per la classe C
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow