Операция деления перегруженных функциональных операторов приводит к замене делителя

когда я создаю класс с именем «Деньги», я перегружаю знак «/» в классе. Но делитель изменился во время операции деления. Как показано ниже:

(1. Это объявление перегруженных операторов функций в заголовочном файле)

Money& operator/(double);
void division(double);

(2. Это конкретное определение перегруженного оператора)

void Money::division(double i)
{
money_number = money_number / i;
}


Money& Money::operator/(double i)
{
division(i);
return *this;
}

(3. Это мой вызов в основной функции)

Money money_temp=100;
Money mmm = 0;
cout <<"mmm" << money_temp << endl;
mmm = money_temp / 2;
cout << "mmm" << money_temp << endl;

Но я обнаружил, что в конце концов «money_temp» изменился после деления. стало 50 из 100. Я пытаюсь удалить "&" в "Money& operator/(double);" , но у меня не получилось.

Как решить эту проблему? Спасибо за вашу помощь.

Вы изменяете его, когда звоните Money::division через оператора. Создайте копию своего объекта и используйте ее.

Gary Strivin' 09.04.2022 17:44
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема:

В Money::division вы изменяете объект с помощью оператора money_number = money_number / i;, который присваивает новое значение money_number.

Решение:

Создайте копию объекта в разделе и верните ее вместо этого.

Код:

Money Money::operator/(double i)
{
    Money temp = money_number / i;
    return temp;
}

Обратите внимание, что я удалил &, потому что в противном случае это привело бы к оборванной ссылке.

Другие вопросы по теме