能给点帮助吗,我真的不会

[问题描述]设计-一个Money类,包含有元、分,能够实现两个Money的一(减)、>运算。

[程序要求]实现Money类两个对象之间的一、>运算;至少定义一个构造函数;定义显示输出函数;

[样例输入]5 20

380

[样例输出]

5.20

1.40

[样例输入说明]

第一行输入代表: 5.2元

第二行输入代表: 3.8元

[样例输出说明]

第一行输出代表:两个输入 金额中较大者第二行输出代表:两个输入金额之差

输入格式应该是 元 空格 分 对吧?

img

#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;
}

我看你的要求有这几点

  1. 手动输入数值
  2. 构造函数至少一个
  3. 实现 两数相减 和 大小对比 操作

按照你题目的要求来做

  1. 手动输入数值 = 默认构造函数 + 重载输入运算符
  2. 两个构造函数 = 默认 + 拷贝构造
  3. 两数相减 = 重载 - 这个操作符
  4. 大小对比 = 重载 > 这个操作符

PS:

  1. 这里我都用的友元函数进行重载,因为这样比较符合我们人为的进行加减,比较操作的习惯!
  2. 主函数里面,我看你得要求里会先判断了最大值再进行差值输出,所以我把差值输出放在了比较大小后,这样子就恒定大数 - 小数,输出就一定不为负数,符合实际。当然你要小数 - 大数 也是可以得
    • 操作符得重载里,我用最好理解得方法写 --> 两个数分别计算总分,再根据结果分离出元 和 分,所以看起来代码会有点长,但是比较好理解
      嗯~不懂得你再问吧,不知道还有啥要说明得

#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;
}

结果图:

img


#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;
}


img