[问题描述]设计-一个Money类,包含有元、分,能够实现两个Money的一(减)、>运算。
[程序要求]实现Money类两个对象之间的一、>运算;至少定义一个构造函数;定义显示输出函数;
[样例输入]5 20
380
[样例输出]
5.20
1.40
[样例输入说明]
第一行输入代表: 5.2元
第二行输入代表: 3.8元
[样例输出说明]
第一行输出代表:两个输入 金额中较大者第二行输出代表:两个输入金额之差
输入格式应该是 元 空格 分 对吧?
#include<iostream>
class Money
{
public:
Money(int y, int f) : yuan(y), fen(f) {}
bool operator>(const Money& m) const
{
return yuan == m.yuan ? fen > m.fen : yuan > m.yuan;
}
Money operator-(const Money& m)const
{
int total = (yuan * 100 + fen) - (m.yuan * 100 + m.fen);
return Money(total / 100, total % 100);
}
int GetYuan()const { return yuan; }
int GetFen()const { return fen; }
private:
int yuan;
int fen;
};
std::ostream& operator<<(std::ostream& o, const Money& m)
{
o << m.GetYuan() << "." << m.GetFen();
return o;
}
int main()
{
int yuan, fen;
std::cin >> yuan >> fen;
Money m1(yuan, fen);
std::cin >> yuan >> fen;
Money m2(yuan, fen);
if (m2 > m1)
{
Money diff = m2 - m1;
std::cout << m2 << std::endl;
std::cout << diff << std::endl;
}
else
{
Money diff = m1 - m2;
std::cout << m1 << std::endl;
std::cout << diff << std::endl;
}
return 0;
}
我看你的要求有这几点
按照你题目的要求来做
PS:
#include <iostream>
using namespace std;
class Money
{
public:
Money(){} // 默认构造函数
Money(int x, int y) : yuan(x), fen(y) {} // 拷贝构造函数
~Money(){}
friend Money operator -(const Money& m1, const Money& m2);
friend bool operator >(const Money& m1, const Money& m2);
friend istream& operator >> (istream &in, Money& m);
void print();
private:
int yuan;
int fen;
};
Money operator-(const Money& m1, const Money& m2)
{
Money m;
int sum1 = m1.yuan * 100 + m1.fen;
int sum2 = m2.yuan * 100 + m2.fen;
int res = sum1 - sum2;
int Y = res / 100;
int F = res - Y *100;
m.yuan = Y;
m.fen = F;
return m;
}
bool operator>(const Money& m1, const Money& m2)
{
int sum1 = m1.yuan * 100 + m1.fen;
int sum2 = m2.yuan * 100 + m2.fen;
return (sum1 > sum2);
}
istream& operator >> (istream &in, Money& m)
{
in>>m.yuan>>m.fen;
return in;
}
void Money::print()
{
cout << yuan << "." << fen << endl;
}
int main()
{
// Money m1(5, 20) --> 这是拷贝构造函数的用法
Money m1;
cout << "Please input money1[yuan fen]: ";
cin >> m1;
Money m2;
cout << "Please input money2[yuan fen]: ";
cin >> m2;
Money m3;
if (m1 > m2)
{
m1.print();
m3 = m1 - m2;
m3.print();
}
else
{
m2.print();
m3 = m2 - m1;
m3.print();
}
return 0;
}
结果图:
#include<iostream>
using namespace std;
class Money
{
private:
int yuan;
int fen;
public:
//构造函数,默认参数为0
Money(int yuan=0, int fen=0);
//重载>符号
bool operator>(Money& m1);
//重载-符号
Money operator-(Money& m1);
//重载<<符号,用于输出
friend ostream& operator<<(ostream& os, Money m);
};
int main()
{
int yuan, fen;
cin >> yuan >> fen;
Money m1 = Money{ yuan, fen };
cin >> yuan >> fen;
Money m2 = Money{ yuan,fen };
if (m1 > m2)
{
cout << m1;
cout << (m1 - m2);
}
else
{
cout << m2;
cout << (m2 - m1);
}
return 0;
}
Money::Money(int yuan, int fen)
{
this->yuan = yuan;
this->fen = fen;
}
bool Money:: operator>(Money& m1)
{
if (yuan == m1.yuan)
{
return yuan > m1.fen;
}
return yuan > m1.yuan;
}
Money Money::operator-(Money& m1)
{
int f = fen - m1.fen;
int y = yuan - m1.yuan;
if (f < 0)
{
f += 100;
y -= 1;
}
return Money{ y,f };
}
ostream& operator<<(ostream& os, Money m)
{
os << m.yuan << '.' << m.fen<<endl;
return os;
}