Цепочки вызовов в C++
Методы можно вызывать друг за другом, цепочкой. Для этого метод возвращает тот же объект, и следующий вызов пишут через точку.
Сам объект внутри метода получают так: перед this
ставят звезду, *this. Тип результата - ссылка
на User, ее пишут User&. Запишем класс
User с двумя сеттерами:
#include <iostream>
#include <string>
class User {
public:
std::string name;
std::string surn;
User& setName(std::string name) {
this->name = name;
return *this;
}
User& setSurn(std::string surn) {
this->surn = surn;
return *this;
}
};
Создадим объект и выведем имя с фамилией после цепочки сеттеров:
int main() {
User user;
user.setName("john").setSurn("smit");
std::cout << user.name << " " << user.surn << "\n";
return 0;
}
Порядок вызовов в цепочке может быть любым - каждый метод работает с тем же объектом. Запишем класс с сеттерами имени и возраста:
#include <iostream>
#include <string>
class User {
public:
std::string name;
int age = 0;
User& setName(std::string name) {
this->name = name;
return *this;
}
User& setAge(int age) {
this->age = age;
return *this;
}
};
Создадим объект, вызовем сеттеры в другом порядке и выведем поля:
int main() {
User user;
user.setAge(25).setName("john");
std::cout << user.name << "\n";
std::cout << user.age << "\n";
return 0;
}
Сделайте класс Employee с полями name
и salary. Сделайте методы setName
и setSalary, которые возвращают Employee&.
Создайте объект Employee цепочкой из двух
сеттеров. Выведите имя и зарплату.