设计一个money类,包含有元,角,分,能实现+、<<、>>三种运算符的重载c++
时间: 2024-02-28 21:56:23 浏览: 24
好的,下面是一个可以实现+、<<、>>三种运算符重载的Money类的设计(C++实现):
```c++
#include <iostream>
class Money {
public:
Money(int yuan = 0, int jiao = 0, int fen = 0) {
this->yuan = yuan;
this->jiao = jiao;
this->fen = fen;
}
friend std::ostream& operator<<(std::ostream& os, const Money& money) {
os << money.yuan << "元" << money.jiao << "角" << money.fen << "分";
return os;
}
Money operator+(const Money& other) const {
int yuan = this->yuan + other.yuan;
int jiao = this->jiao + other.jiao;
int fen = this->fen + other.fen;
if (fen >= 10) {
jiao += fen / 10;
fen %= 10;
}
if (jiao >= 10) {
yuan += jiao / 10;
jiao %= 10;
}
return Money(yuan, jiao, fen);
}
Money operator<<(int n) const {
int yuan = this->yuan * pow(10, n);
int jiao = this->jiao * pow(10, n);
int fen = this->fen * pow(10, n);
return Money(yuan, jiao, fen);
}
Money operator>>(int n) const {
int yuan = this->yuan / pow(10, n);
int jiao = this->jiao / pow(10, n);
int fen = this->fen / pow(10, n);
return Money(yuan, jiao, fen);
}
private:
int yuan, jiao, fen;
};
```
这个类有三个属性:yuan(元)、jiao(角)和fen(分)。它还实现了输出运算符<<和三个运算符重载函数:+、<<、>>。
加法运算会将两个Money对象相加,得到一个新的Money对象。在相加的过程中,需要注意进位的情况。
左移运算会将一个Money对象的所有属性都乘以$10^k$,得到一个新的Money对象。
右移运算会将一个Money对象的所有属性都除以$10^k$,得到一个新的Money对象。
其中,输出运算符<<是通过友元函数实现的。