codeFlowType:
codeWrite
codeFlowLang:
C++
Напишите программу, объединяющую в себе классы 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