Одним из основных преимуществ возврата по ссылке в классах является возможность
легко цепные функции.
Предположим, что ваша функция-член предназначена для умножения определенного члена вашего класса.
Если вы создадите заголовочные и исходные файлы, чтобы хранить информацию о классе и определение функции-члена отдельно, то
заголовочный файл myclass.h
будет:
#ifndef myclass_h
#define myclass_h
class myclass{
public:
int member1_;
double member2_;
myclass (){
member1_ = 1;
member2_ = 2.0;
}
myclass& MULT(int scalar);
myclass* MULTP(double scalar);
};
#endif
и исходный файл: myclass.cpp
будет:
myclass& myclass::MULT(int scalar){
member1_ *= scalar;
return *this;
}
myclass* myclass::MULTP(double scalar){
member2_ *= scalar;
return this;
}
Если вы инициализируете объект с именем obj
, конструктор по умолчанию выше устанавливает member1_
равным 1:
Затем в вашей основной функции вы можете создавать цепочки, такие как:
myclass obj;
obj.MULT(2).MULT(4);
Тогда member1_
теперь будет 8. Конечно, идея может состоять в том, чтобы связать различные функции,
и изменять разных членов.
В случае, если вы используете возврат по указателю , первый вызов использует объект,
и любой последующий вызов будет рассматривать предыдущий результат как указатель, таким образом
obj.MULTP(2.0)->MULTP(3.0);