2013-07-14 19 views
9

Stavo guardando un codice sorgente open source e ho notato che per alcuni metodi, piuttosto che usare void per un tipo restituito, avevano usato un riferimento a quella classe.Object reference vs Void tipo di ritorno per un metodo

Esempio:

class Object 
{ 
private: 
    float m_x; 
public: 
    Object(); 
    Object& setX(float x) 
    { 
     m_x = x; 
     return *this; 
    } 
}; 

Normalmente, avrei scritto la stessa funzione come questa:

class Object 
{ 
private: 
    float m_x; 
public: 
    Object(); 
    void setX(float x) 
    { 
     m_x = x; 
    } 
}; 

C'è qualche vantaggio di utilizzare uno sopra l'altro?

risposta

8

Sì, ci sono alcuni vantaggi con la restituzione di un riferimento. Quando si restituisce un riferimento, è possibile continuare a lavorare insieme sul riferimento restituito e concatenare più chiamate di funzioni. Per esempio, se ci fosse una funzione setY troppo, si potrebbe fare questo:

object.setX(5).setY(10); 

che restituisce un riferimento in realtà non hanno svantaggi ma permette alcune cose belle. Può essere utilizzato per creare interfacce fluenti, aggirare la mancanza di parametri con nome in C++ se si desidera e altre cose.

legge correlati:

+0

La ringrazio molto per la risposta. Non mi rendevo conto che potevi farlo in C++. – Xplane

+5

Questo stile è noto come "metodo di concatenamento" (http://en.wikipedia.org/wiki/Method_chaining) o ["interfaccia fluente"] (http://martinfowler.com/bliki/FluentInterface.html). –

Problemi correlati