您的位置:首页 > 文旅 > 美景 > 作业-day-240607

作业-day-240607

2025/5/4 16:28:28 来源:https://blog.csdn.net/SweetDvil/article/details/139576084  浏览:    关键词:作业-day-240607

思维导图

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{//定义友元函数friend const RMB operator--(RMB &R, int);private:int yuan;   //元int jiao;   //角int fen;    //分static int count;   //已创建的 RMB 对象的数量public://静态成员函数:获取当前countstatic int getCount(){return count;}//静态成员函数:修改当前countstatic void changeCount(int date){count = date;}//无参构造函数RMB(){changeCount(++count);   //cout+1}//有参构造函数:初始化RMB(int y, int j, int f):yuan(y),jiao(j),fen(f){changeCount(++count);   //cout+1}//成员函数:输出类信息void display(){cout << yuan << "元\t" << jiao << "角\t" << fen << "分" << endl;}//成员函数:=号运算符重载RMB &operator=(const RMB &other){//避免给自己赋值if(this != &other){yuan = other.yuan;jiao = other.jiao;fen = other.fen;}return *this;}//成员函数:+号运算符重载const RMB operator+(const RMB &R) const{RMB temp;temp.yuan = yuan + R.yuan;temp.jiao = jiao + R.jiao;temp.fen = fen + R.fen;if(temp.fen >= 10)  //进位:分>10,角+1,分-10{temp.jiao++;temp.fen -= 10;}if(temp.jiao >= 10) //进位:角>10,元+1,角-10{temp.yuan++;temp.jiao -= 10;}return temp;}//成员函数:-号运算符重载const RMB operator-(const RMB &R) const{RMB temp;temp.yuan = yuan - R.yuan;temp.jiao = jiao - R.jiao;temp.fen = fen - R.fen;if(temp.fen < 0)    //补位{temp.jiao--;temp.fen += 10;}if(temp.jiao < 0)   //补位{temp.yuan--;temp.fen += 10;}if(temp.yuan < 0)   //元为负数,则提醒{cout << "元已为负数!" << endl;}return temp;}//成员函数:>号运算符重载bool operator>(const RMB &R) const{if(yuan > R.yuan || (yuan == R.yuan && jiao > R.jiao) || (yuan == R.yuan && jiao == R.jiao && fen > R.fen) )return true;elsereturn false;}//成员函数:--前置减减运算符重载RMB &operator--(){--fen;if(fen < 0)     //补位{jiao--;fen += 10;}--jiao;if(jiao < 0)    //补位{yuan--;jiao += 10;}--yuan;if(yuan < 0)    //元为负数,则提醒{cout << "元已为负数!" << endl;}return *this;}};//初始化静态变量count
int RMB::count = 0;//全局函数:--后置减减运算符重载
const RMB operator--(RMB &R, int)
{RMB temp;temp.yuan = R.yuan--;temp.jiao = R.jiao--;temp.fen = R.fen--;if(temp.fen < 0)     //补位{temp.jiao--;temp.fen += 10;}if(temp.jiao < 0)    //补位{temp.yuan--;temp.jiao += 10;}if(temp.yuan < 0)    //元为负数,则提醒{cout << "元已为负数!" << endl;}return temp;
}int main()
{RMB r1(100,9,5);cout << "cout = " << RMB::getCount() << endl;cout << "r1 =\t";r1.display();cout << "--r1 =\t";(--r1).display();RMB r2 = r1--;cout << "cout = " << RMB::getCount() << endl;cout << "r2 =\t";r2.display();cout << "r1-- =\t";r1.display();RMB r3(87,4,8);cout << "cout = " << RMB::getCount() << endl;cout << "r3 =\t";r3.display();RMB t1 = r1 - r3;cout << "cout = " << RMB::getCount() << endl;cout << "r1 =\t";r1.display();cout << "r3 =\t";r3.display();cout << "r1 - r3 =\t";t1.display();RMB t2 = r1 + r2;cout << "cout = " << RMB::getCount() << endl;cout << "r1 =\t";r1.display();cout << "r2 =\t";r2.display();cout << "r1 + r2 =\t";t2.display();if(r1 > r2)cout << "r1 > r2" << endl;elsecout << "r1 < r2" << endl;return 0;
}

运行结果:

版权声明:

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

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