Zależy jaka jest sygnatura funkcji. Jeśli masz:
Klasa fun() {return *this;};
To zwracasz kopie obiektu na którym została wywołana ta metoda.
Jeśli natomiast funkcja zwraca referencje to, zwracasz referencje do obiektu.
Czemu to jest przydatne? Np metoda Klasa& add(int x), pozwoli na łańcuchowe wywołanie, z czego dużo się korzysta, np przy przeładowywaniu operatora =.
Klasa a;
a.add(5).add(100).add(1);
I w ten sposób dodajesz cały czas do oryginalnego obiektu a.