Как сделать операцию умножения коммутативной?

class Money {
    ///Поля
    unsigned long long rubles; 
    unsigned char penny; 
...
}
...
Money Money::DoubleToMoney(double num) {
    double first = 0.0,
        second = modf(num, &first); //дробная часть числа = modf(число, целая часть числа)
    //вынимаем целую часть из дробного и присваиваем к рублям
    this->rubles = unsigned long long(first);
    //первые 2 значения из дробного числа присваиваем копейкам
    second *= 100;
    first = modf(second, &second);
    this->penny = unsigned char(second);
    return *this;
}
...
double Money::MoneyToDouble() const { return (rubles * 100 + penny) / 100.0; }
...
Money operator*(const Money & ob, const double & amount) { return Money{}.DoubleToMoney(ob.MoneyToDouble() * amount);}
Money operator*(const double & amount, const Money & ob) { return Money{}.DoubleToMoney(ob.MoneyToDouble() * amount);}
Money operator/(const Money & ob, const double & amount) { return Money{}.DoubleToMoney(ob.MoneyToDouble() / amount);}

Ответ: вынести операторы из класса


Ответы (0 шт):