欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > C++重载

C++重载

2025/1/24 5:10:05 来源:https://blog.csdn.net/m0_75109289/article/details/141869312  浏览:    关键词:C++重载

搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:

(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。

(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。

(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1

(4)重载后置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1

(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。每当创建一个新的 RMB 对象时,count 应该自增 1;每当销毁一个 RMB 对象时,count 应该自减 1。

要求,需要在main 函数中测试上述RMB 类的功能。

#include <iostream>using namespace std;// 封装 RMB 类,用于表示人民币金额
class RMB
{
private:int yuan;     // 元int jiao;     // 角int fen;      // 分static int num; // 记录RMB对象的个数,静态数据成员public:// 无参构造函数,初始化时增加对象计数RMB() { num++; }// 有参构造函数,初始化元、角、分,并增加对象计数RMB(int y, int j, int f) : yuan(y), jiao(j), fen(f) { num++; }// 析构函数,减少对象计数~RMB() { num--; }// 重载减法运算符,用于两个RMB对象相减const RMB operator-(const RMB &other) const{int last1 = yuan * 100 + jiao * 10 + fen; // 当前对象的总分数int last2 = other.yuan * 100 + other.jiao * 10 + other.fen; // 其他对象的总分数int new_last = last1 - last2; // 相减后的总分数// 计算新的元int new_yuan = new_last % 100;int new_jiao = new_last / 10; // 计算新的角int new_fen = new_last % 10; // 计算新的分return RMB(new_yuan, new_jiao, new_fen); // 返回新的RMB对象}// 重载加法运算符,用于两个RMB对象相加const RMB operator+(const RMB &other) const{int last1 = yuan * 100 + jiao * 10 + fen; // 当前对象的总分数int last2 = other.yuan * 100 + other.jiao * 10 + other.fen; // 其他对象的总分数int last = last1 + last2; // 相减后的总分数// 计算新的元int new_yuan = last % 100;int new_jiao = last / 10; // 计算新的角int new_fen =  last % 10; // 计算新的分return RMB(new_yuan, new_jiao, new_fen); // 返回新的RMB对象}//重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。bool operator>(const RMB &other)const{int last1 = yuan * 100 + jiao * 10 + fen; // 当前对象的总分数int last2 = other.yuan * 100 + other.jiao * 10 + other.fen; // 其他对象的总分数if(last1>=last2){return true;}else{return false;}}// 前缀递减运算符重载,用于减少RMB对象的金额RMB &operator--(){--yuan;--jiao;--fen;return *this; // 返回当前对象的引用}// 后缀递减运算符重载,用于减少RMB对象的金额,并返回减少前的对象const RMB operator--(int){RMB temp; // 创建一个当前对象的副本temp.yuan=yuan--; // 调用前缀递减运算符temp.jiao=jiao--;temp.fen=fen--;return temp; // 返回减少前的对象}// 显示RMB对象的金额void show(){cout << "元:" << yuan << "  " << "角:" << jiao << "  " << "分:" <<fen << endl;}// 显示RMB对象的总数void show_num(){cout << "人民币总数 = " << num << endl;}
};// 静态成员变量初始化
int RMB::num = 0;int main()
{RMB r1(10, 20, 30);RMB r2(5, 10, 20);RMB r3 = r1 - r2; // 使用重载的减法运算符RMB r4=r1+r2;r3.show(); // 显示r3的金额r4.show();//显示r4的金额if(r4>r3){cout << "r4 >r3 " << endl;}r1.show_num(); // 显示RMB对象的总数,但这里预期的输出可能不是3,因为静态成员变量num的计数方式可能不符合直观预期r2.show_num();r3.show_num();r4.show_num();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com