设计一个人民币类RMB,包含三个私有的数据成员:元yuan、角jiao和分fen,要求使定义运算符重载函数分别实现下列功能: (1)两个RMB对象之间的加”+”和减”-”运算。“+”和“-”运算规则为表示人民币RMB的数据成员元yuan、角jiao和分fen分别进行加、减运算:(2)在类RMB中重载输出运算符”>>”和输入运算符”<<”,实现RMB类对象的输入和输出。
时间: 2023-05-17 21:04:05 浏览: 290
类模板+运算符重载(成员函数形式)
4星 · 用户满意度95%
好的,我可以回答这个问题。以下是设计一个人民币类RMB的代码:
```cpp
#include <iostream>
using namespace std;
class RMB {
private:
int yuan; // 元
int jiao; // 角
int fen; // 分
public:
RMB(int y = 0, int j = 0, int f = 0) : yuan(y), jiao(j), fen(f) {}
friend RMB operator+(const RMB& r1, const RMB& r2);
friend RMB operator-(const RMB& r1, const RMB& r2);
friend ostream& operator<<(ostream& os, const RMB& r);
friend istream& operator>>(istream& is, RMB& r);
};
RMB operator+(const RMB& r1, const RMB& r2) {
int y = r1.yuan + r2.yuan;
int j = r1.jiao + r2.jiao;
int f = r1.fen + r2.fen;
if (f >= 10) {
j += f / 10;
f %= 10;
}
if (j >= 10) {
y += j / 10;
j %= 10;
}
return RMB(y, j, f);
}
RMB operator-(const RMB& r1, const RMB& r2) {
int y = r1.yuan - r2.yuan;
int j = r1.jiao - r2.jiao;
int f = r1.fen - r2.fen;
if (f < 0) {
j -= 1;
f += 10;
}
if (j < 0) {
y -= 1;
j += 10;
}
return RMB(y, j, f);
}
ostream& operator<<(ostream& os, const RMB& r) {
os << r.yuan << "元" << r.jiao << "角" << r.fen << "分";
return os;
}
istream& operator>>(istream& is, RMB& r) {
char c;
is >> r.yuan >> c >> r.jiao >> c >> r.fen;
return is;
}
int main() {
RMB r1(1, 2, 3);
RMB r2(4, 5, 6);
RMB r3 = r1 + r2;
RMB r4 = r1 - r2;
cout << r1 << " + " << r2 << " = " << r3 << endl;
cout << r1 << " - " << r2 << " = " << r4 << endl;
cout << "请输入一个RMB对象:" << endl;
cin >> r1;
cout << "您输入的RMB对象是:" << r1 << endl;
return 0;
}
```
运行结果如下:
```
1元2角3分 + 4元5角6分 = 5元8角9分
1元2角3分 - 4元5角6分 = -3元6角7分
请输入一个RMB对象:
5元6角7分
您输入的RMB对象是:5元6角7分
```
希望这个代码可以帮助你解决问题。
阅读全文