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.

È stato utile?

Soluzione

  1. In realtà, C c(); dovrebbe essere analizzato come un dichiarazione di funzione . Per esplicitamente invocare il default-costruttore, è necessario C c = C(); scrittura.
  2. Dopo aver definito alcun costruttore, il compilatore non fornire un default-costruttore per il vostro tipo, in modo che nessuno potrebbe essere chiamato.
  3. 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
scroll top