2013-07-14 12 views
9

Szukałem kodu źródłowego open source i zauważyłem, że dla niektórych metod, zamiast używać void dla typu zwrotu, użyli odwołania do tej klasy.Object reference vs Void return type dla metody

Przykład:

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

Normalnie, chciałbym napisać taką samą funkcję jak poniżej:

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

Czy jest jakaś zaleta przy użyciu jednego nad drugim?

Odpowiedz

8

Tak, istnieją pewne zalety związane z zwrotem referencji. Zwracając referencję można dalej pracować nad zwróconym odwołaniem i połączyć wiele wywołań funkcji razem. Na przykład, jeśli nie były zbyt setY funkcji, można to zrobić:

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

Zwracanie referencji naprawdę nie mają wady, ale pozwala na kilka ciekawych rzeczy. Może być używany do tworzenia płynnych interfejsów, obejścia braku nazwanych parametrów w C++, jeśli chcesz, i innych rzeczy.

pokrewne brzmi:

+0

Dziękuję bardzo za odpowiedź. Nie zdawałem sobie sprawy, że możesz to zrobić w C++. – Xplane

+5

Ten styl jest znany jako ["metoda łańcuchowa"] (http://en.wikipedia.org/wiki/Method_chaining) lub ["płynny interfejs"] (http://martinfowler.com/bliki/FluentInterface.html). –

Powiązane problemy