Есть class Money
oop.h
#pragma once
class Money
{
private:
unsigned long long rubles;
unsigned int penny;
public:
Money();
Money(const Money& money);
Money(unsigned long long r, unsigned char p);
Money operator /(Money &rhs);
friend std::ostream& operator<<(std::ostream& os, const Money &data);
};
oop.cpp
#include <iostream>
#include "oop.h"
Money::Money()
{
rubles = 0;
penny = 0;
}
Money::Money(const Money& money)
{
rubles = money.rubles;
penny = money.penny;
}
Money::Money(unsigned long long rubles, unsigned char penny)
:rubles(rubles), penny(penny) {}
Money Money::operator /(Money &rhs)
{
return Money(rubles / rhs.rubles, penny / rhs.penny);
}
std::ostream& operator<<(std::ostream& os,const Money& data)
{
os << data.rubles << "," << data.penny;
return os;
}
Source.cpp
#include <iostream>
#include <windows.h>
#include "oop.h"
int main()
{
SetConsoleOutputCP(1251);
Money rubles(10,1);
Money rubles2(5, 8);
std::cout << rubles / rubles2 << std::endl;
system("pause");
}
Как правильно поделить две дробные числа, где целая и дробная часть - это две разные поля?
Программа, классы и т.п. - это всего лишь модели реальности.
Money Money::operator /(Money &rhs)
Скажите, если вы поделите 15 рублей 25 копеек на 3 рубля 47 копеек, то какую сумму (а у вас операция деления возвращает именно Money) вы получите?
В лучшем случае вам нужно возвращать значение типа double:
double Money::operator /(Money &rhs)
{
return double(rubles*100+penny)/(rhs.rubles*100+rhs.penny);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей