设计人民币类,其数据成员为分(fen),角(jiao ),元(yuan )。

设计人民币类,其数据成员为分(fen),角(jiao ),元(yuan )。重载这个类的加法、减法运算符。

  1. 重载为类的成员函数
    2)重载为类的友元

#include <iostream>
using namespace std;

class RMB {
public:
    RMB(int f = 0, int j = 0, int y = 0): fen(f), jiao(j), yuan(y) {}
    
    // 重载为类成员函数
    RMB operator+ (const RMB& rmb) {
        int f = fen + rmb.fen;
        int j = jiao + rmb.jiao;
        int y = yuan + rmb.yuan;
        j += f / 10;
        f = f % 10;
        y += j / 10;
        j = j % 10;
        return RMB(f, j, y);
    }
    
    RMB operator- (const RMB& rmb) {
        int f = fen - rmb.fen;
        int j = jiao - rmb.jiao;
        int y = yuan - rmb.yuan;
        if (f < 0) {
            j -= 1;
            f += 10;
        }
        if (j < 0) {
            y -= 1;
            j += 10;
        }
        return RMB(f, j, y);
    }
    
    // 友元函数重载
    friend RMB operator+ (const RMB& r1, const RMB& r2);
    friend RMB operator- (const RMB& r1, const RMB& r2);
    
    void display() {
        cout << "元:" << yuan << ", 角:" << jiao << ", 分:" << fen << endl;
    }

private:
    int fen, jiao, yuan;
};

// 重载为友元函数
RMB operator+ (const RMB& r1, const RMB& r2) {
    int f = r1.fen + r2.fen;
    int j = r1.jiao + r2.jiao;
    int y = r1.yuan + r2.yuan;
    j += f / 10;
    f = f % 10;
    y += j / 10;
    j = j % 10;
    return RMB(f, j, y);
}

RMB operator- (const RMB& r1, const RMB& r2) {
    int f = r1.fen - r2.fen;
    int j = r1.jiao - r2.jiao;
    int y = r1.yuan - r2.yuan;
    if (f < 0) {
        j -= 1;
        f += 10;
    }
    if (j < 0) {
        y -= 1;
        j += 10;
    }
    return RMB(f, j, y);
}

int main() {
    RMB r1(8, 5, 3);
    RMB r2(3, 2, 2);
    RMB r3;
    RMB r4;

    r3 = r1 + r2;
    r4 = r1 - r2;
    
    r3.display();
    r4.display();
    
    return 0;
}