设计人民币类,其数据成员为分(fen),角(jiao ),元(yuan )。重载这个类的加法、减法运算符。
#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;
}