Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    55

    [C++] Costruttori di default

    Ciao a tutti,
    so benissimo che in ogni classe deve esserci un costruttore di default (quindi un costruttore senza parametri), ma se creo un costruttore che accetta parametri inizializzandoli automaticamente? mi spiego meglio:

    Ho questa classe:

    codice:
    class complex
    {
        //stato interno
        double real, imag;
    
    
        //metodi
        public:
    
    
            //costruttore
            complex(); //costruttore di default
            complex(double r, double i);
            void print();
    
    
            //metodi getter/setter
            double getReal();
            double getImag();
    
    
            void setReal(double newValue);
            void setImag(double newValue);
    };
    e questa classe:

    codice:
    class complex
    {
        //stato interno
        double real, imag;
    
    
        //metodi
        public:
    
    
            //costruttore
            complex(double r = 0.0, double i = 0.0 );
            void print();
    
    
            //metodi getter/setter
            double getReal();
            double getImag();
    
    
            void setReal(double newValue);
            void setImag(double newValue);
    };
    la prima prevede il costruttore di default
    codice:
    complex::complex() : complex(0,0) {};
    che richiama a sua volta l'altro costruttore passandogli i valori 0 e 0 (in modo tale da inizializzare il numero a 0).

    L'altra classe non ha il costruttore di default e all'apparenza funziona lo stesso

    quale versione è la migliore/più corretta tra le due?


    Grazie mille!

  2. #2
    Visto che fino a prima del C++11 non era possibile fare il forwarding dei costruttori in giro troverai soprattutto codice che usa i parametri di default, ma ora i due metodi sono equivalenti, ed è sostanzialmente questione di gusti (tolto il discorso della compatibilità binaria e dell'espansione dei parametri di default sul sito di chiamata, per cui valgono le stesse considerazioni che si possono fare per le funzioni normali). Personalmente, preferisco gli argomenti di default quando, appunto, sono effettivamente il default per un certo parametro, mentre l'overload quando è proprio il comportamento della funzione che differisce in maniera significativa, ma, di nuovo, sono gusti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    55
    quindi la seconda versione è effettivamente utilizzabile solo se si dispone del C++11? a questo punto è più sicuro usare la version con costruttore di default no?

    nel caso di una classe per numeri compelssi...tu quale utilizzeresti?
    Ultima modifica di Lodin; 19-04-2015 a 11:12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.