Come inizializzare tutti i tuoi riferimenti?

3

Recentemente ho preso un progetto con un altro sviluppatore, e lui ha un certo modo di inizializzare i suoi riferimenti.

class Player
{
    private:
        Console &console;
        Armor &armor1, &armor2;
        Debugger &debugger;
        sf::RenderWindow &window;
        sf::Event &event;

   public:
       Player(Console &console, Armor &armor1, ...) : console(console), armor1(armor1), ... {};
}

E va benissimo con me, ma cosa succede se aggiungiamo nuove cose? Il nostro costruttore è enorme e così disordinato, mi piacerebbe sapere se ci sono modi migliori per inizializzare i tuoi riferimenti se hai un progetto di grandi dimensioni, perché se continuiamo così, alla fine il nostro costruttore avrà più linee di codice di quello in realtà.

    
posta Bugster 27.07.2013 - 17:11
fonte

3 risposte

4

I membri dei tipi di riferimento possono essere inizializzati solo nell'elenco di inizializzazione nel costruttore, poiché i riferimenti non possono essere rimbalzati. Quindi devono essere inizializzati nel costruttore come hai scritto tu. È l'unico modo.

Che mostra due punti:

  1. La classe non è troppo grande?
  2. Sono davvero tutte le dipendenze iniettate da tenere per riferimento? Una classe "Player" sembra più che dovrebbe possedere cose come "Armour". Questo è tenuto da un puntatore (preferibilmente intelligente) e lo costruisce da solo.
risposta data 13.08.2013 - 13:59
fonte
0

Il tuo metodo è un buon modo per inizializzare le proprietà in c ++.

Si prega di notare l'ordine di inizializzazione delle proprietà.

Se usi C struct, puoi usare:

struct Obj   
obj={.a="a",.b="b"}; 

per iniziare tutte le proprietà.

Penso che C sia meglio del C ++.
Il C ++ ha molte trappole.

    
risposta data 13.08.2013 - 11:41
fonte
-1

C ++ 11 consente l'inizializzazione nella stessa dichiarazione di classe.

Tuttavia, se è necessario inizializzarsi da fonti esterne, ciò non aiuterà.

Puoi anche inizializzare su una base 'come necessario' - non devi fare tutto in una volta nel costruttore, ma nella chiamata che effettivamente usa il riferimento - ogni riferimento al momento opportuno.

Questo dipende ovviamente dal tuo design, ma spesso è un buon modo per evitare quei brutti mastodontici costruttori.

    
risposta data 27.07.2013 - 23:21
fonte

Leggi altre domande sui tag