'The division operation of overloaded function operators leads to the change of divisor

when I build a class named "Money", I overloaded the "/" sign in the class. But the divisor changed during the division operation. As shown below:

(1.This is the declaration of overloaded function operators in the header file)

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

(2.This is the specific definition of overloaded operator)

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


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

(3.This is my call to it in the main function)

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

But I found that in the end “money_temp” changed after division. it became 50 from 100. I try to delete the "&" in the "Money& operator/(double);" , but I failed.

How to resolve this problem? Thanks for your kind help.

c++


Solution 1:[1]

Problem:

In Money::division you're modifying the object through the statement money_number = money_number / i;, which assigns a new value to money_number.

Solution:

Create a copy of the object in the division and return that instead.

Code:

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

Note that I deleted the & because it would lead to a dangling reference otherwise.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Gary Strivin'