Напишите программу, объединяющую в себе классы bMoney

Напишите программу, объединяющую в себе классы bMoney из упражнения 8 и sterling из упражнения 11. Напишите операцию преобразования для преобразования между классами bMoney и sterling, предполагая, что один фунт (£1.0.0) равен пятидесяти долларам ($50.00). Это приблизительный курс обмена для XIX века, когда Британская империя еще использовала меру фунты-шиллинги-пенсы. Напишите программу main(), которая позволит пользователю вводить суммы в каждой из валют и преобразовывать их в другую валюту с выводом результата. Минимизируйте количество изменений в существующих классаx bMoney и sterling.
Дополнительные параметры: codeFlowType: codeWrite codeFlowLang: C++
Создано: 11.07.2023 13:18

Напишите программу, объединяющую в себе классы bMoney из упражнения 8 и sterling из упражнения 11. Напишите операцию преобразования для преобразования между классами bMoney и sterling, предполагая, что один фунт (£1.0.0) равен пятидесяти долларам ($50.00). Это приблизительный курс обмена для XIX века, когда Британская империя еще использовала меру фунты-шиллинги-пенсы. Напишите программу main(), которая позволит пользователю вводить суммы в каждой из валют и преобразовывать их в другую валюту с выводом результата. Минимизируйте количество изменений в существующих классаx bMoney и sterling.

#include <iostream>

using namespace std;

class sterling;

class bMoney {
private:
    long double money;
public:
    bMoney() : money(0.0) {}
    bMoney(double amount) : money(amount) {}
    bMoney(sterling s);

    void getMoney() {
        cout << "Enter the amount in dollars: $";
        cin >> money;
    }

    void putMoney() const {
        cout << "Amount in dollars: $" << money;
    }

    operator sterling() const;

    friend bMoney operator+(const bMoney& b, const sterling& s);
};

class sterling {
private:
    int pounds;
    int shillings;
    int pence;
public:
    sterling() : pounds(0), shillings(0), pence(0) {}
    sterling(double amount);

    void getSterling() {
        cout << "Enter the amount in pounds, shillings, and pence: £";
        cin >> pounds >> shillings >> pence;
    }

    void putSterling() const {
        cout << "Amount in pounds, shillings, and pence: £" << pounds << "." << shillings << "." << pence;
    }

    operator bMoney() const;

    friend bMoney operator+(const bMoney& b, const sterling& s);
};

bMoney::bMoney(sterling s) {
    money = (s.pounds * 50.0) + (s.shillings * 2.5) + (s.pence * 0.208333);
}

sterling::sterling(double amount) {
    double totalPence = amount * (240.0 / 50.0);
    pounds = totalPence / 240;
    shillings = (totalPence - (pounds * 240.0)) / 12;
    pence = totalPence - (pounds * 240.0) - (shillings * 12.0);
}

bMoney::operator sterling() const {
    double totalPence = money * 240.0;
    sterling s;
    s.pounds = totalPence / 240;
    s.shillings = (totalPence - (s.pounds * 240)) / 12;
    s.pence = totalPence - (s.pounds * 240) - (s.shillings * 12);
    return s;
}

bMoney operator+(const bMoney& b, const sterling& s) {
    bMoney result;
    result.money = b.money + bMoney(s).money;
    return result;
}

bMoney sterling::operator bMoney() const {
    return bMoney(*this);
}

int main() {
    bMoney b;
    sterling s;

    b.getMoney();
    s.getSterling();

    bMoney bInSterling = b + s;
    sterling sInDollars = sterling(bInSterling);

    cout << "After conversion:" << endl;
    bInSterling.putMoney();
    sInDollars.putSterling();

    return 0;
}

Результат:

Enter the amount in dollars: $100
Enter the amount in pounds, shillings, and pence: £10.5.0
After conversion:
Amount in dollars: $525
Amount in pounds, shillings, and pence: £10.10.0