Главная страница » C++ » 34. Цепочки вызовов методов
Цепочки вызовов методов (или методические цепочки) позволяют вызывать несколько методов последовательно, используя результаты предыдущих вызовов. Это удобный способ упрощения и улучшения читаемости кода, особенно когда нужно применить несколько операций к объекту. В этом уроке мы рассмотрим, как реализовать и использовать цепочки вызовов методов в C++.
Цепочка вызовов методов возможна, когда каждый метод возвращает объект, для которого можно вызвать следующий метод. Это чаще всего достигается с помощью возвращаемых значений типа *this
, что позволяет возвращать текущий объект.
Пример:
class Calculator {
public:
Calculator& add(int value){
result += value;
return *this;
}
Calculator& subtract(int value){
result -= value;
return *this;
}
Calculator& multiply(int value){
result *= value;
return *this;
}
intgetResult()const{
return result;
}
private:
int result = 0;
};
В данном примере класс Calculator
использует цепочки вызовов методов. Каждый метод возвращает ссылку на текущий объект (*this
), что позволяет вызывать следующие методы в цепочке.
Пример 1: Класс Calculator
#include
class Calculator {
public:
Calculator& add(int value){
result += value;
return *this;
}
Calculator& subtract(int value){
result -= value;
return *this;
}
Calculator& multiply(int value){
result *= value;
return *this;
}
intgetResult()const{
return result;
}
private:
int result = 0;
};
int main(){
Calculator calc;
int finalResult = calc.add(5).subtract(2).multiply(10).getResult();
std::cout << "Результат вычислений: " << finalResult << std::endl; // Вывод: Результат вычислений: 30
return 0;
}
В этом примере методы add
, subtract
и multiply
вызываются последовательно, а результат вычислений получается с помощью метода getResult()
.
Пример 2: Класс StringBuilder
#include
#include
class StringBuilder {
public:
StringBuilder& append(const std::string& str){
result += str;
return *this;
}
StringBuilder& toUpperCase(){
for (char& ch : result) {
ch = std::toupper(ch);
}
return *this;
}
StringBuilder& trim(){
result.erase(0, result.find_first_not_of(" "));
result.erase(result.find_last_not_of(" ") + 1);
return *this;
}
std::string getResult()const{
return result;
}
private:
std::string result;
};
int main(){
StringBuilder builder;
std::string finalString = builder.append(" hello ").toUpperCase().trim().getResult();
std::cout << "Результат: '" << finalString << "'" << std::endl; // Вывод: Результат: 'HELLO'
return 0;
}
В данном примере класс StringBuilder
позволяет строить строку, добавляя к ней подстроки, преобразовывая её в верхний регистр и удаляя пробелы по краям.
Цепочки вызовов методов предоставляют мощный инструмент для упрощения и улучшения читабельности кода. Они позволяют последовательно применять несколько методов к объекту и могут значительно упростить работу с объектами, особенно когда требуется выполнить несколько операций. Важно помнить, что методы, поддерживающие цепочки вызовов, должны возвращать ссылку на текущий объект (*this
), чтобы обеспечить возможность последовательного вызова методов.
Напишите класс Person
, который будет поддерживать цепочки вызовов методов. Класс должен иметь методы для установки имени, возраста и города проживания. Методы должны возвращать ссылку на текущий объект, чтобы можно было вызывать их последовательно. Также добавьте метод printInfo()
, который выводит информацию о человеке.
Примерный код:
#include
#include
class Person {
public:
Person& setName(const std::string& name){
this->name = name;
return *this;
}
Person& setAge(int age){
this->age = age;
return *this;
}
Person& setCity(const std::string& city){
this->city = city;
return *this;
}
voidprintInfo()const{
std::cout << "Имя: " << name << ", Возраст: " << age << ", Город: " << city << std::endl;
}
private:
std::string name;
int age = 0;
std::string city;
};
int main(){
Person person;
person.setName("Иван").setAge(30).setCity("Москва").printInfo();
return 0;
}
Этот пример покажет, как можно использовать цепочки вызовов методов для последовательной настройки объекта и вывода его информации.
Наша цель и главная задача сделать качественное образование в вашем браузере
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024 Все права защищены. CodeFor.