Основное из главы 11. Прата.
Консоль:
a: 0 m 0 cm
b: 5 m 40 cm
c: 5 m 60 cm
==================
a: 11 m 0 cm
b: 11 m 0 cm
c: 5 m 60 cm
Как можем заметить переменная b изменилась, что является неожиданным моментом работы кода.
Поэтому в (1) и создается локальный объект, чтобы предотвратить возможное поведение.
#include <iostream>
#include "file.h"
Distance::Distance(int m, int cm) : meters(m), centimeters(cm) {}
Distance Distance::operator+(const Distance& other) {
centimeters = centimeters + other.centimeters;
meters += other.meters + centimeters / 100;
centimeters %= 100;
return *this;
}
void Distance::show() const {
std::cout << meters << " m " << centimeters << " cm" << std::endl;
}
int main() {
Distance a, b(5, 40), c(5, 60);
std::cout << "a: ";
a.show();
std::cout << "b: ";
b.show();
std::cout << "c: ";
c.show();
std::cout << "==================" << std::endl;
a = b + c;
std::cout << "a: ";
a.show();
std::cout << "b: ";
b.show();
std::cout << "c: ";
c.show();
return 0;
}
Консоль:
a: 0 m 0 cm
b: 5 m 40 cm
c: 5 m 60 cm
==================
a: 11 m 0 cm
b: 11 m 0 cm
c: 5 m 60 cm
Как можем заметить переменная b изменилась, что является неожиданным моментом работы кода.
Поэтому в (1) и создается локальный объект, чтобы предотвратить возможное поведение.