Основное из главы 11. Прата.

#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) и создается локальный объект, чтобы предотвратить возможное поведение.
Просмотры: 47
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти