18_4.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:1k
源码类别:

C#编程

开发平台:

Visual C++

  1. //18_4.cpp
  2. #include<iostream.h>
  3. class RMB{
  4. public:
  5. RMB(double d);
  6.   RMB(unsigned d, unsigned c);
  7.   RMB operator+(RMB&)const;
  8.   RMB& operator++();
  9. RMB& operator+=(const RMB& r);
  10. RMB& operator-=(const RMB& r);
  11.   void display()const { cout << (yuan + jf/100.0) << endl; }
  12. RMB operator*(double d) const;
  13. protected:
  14.   unsigned yuan;
  15.   unsigned jf;
  16. };
  17. RMB::RMB(double d)
  18. {
  19.   yuan=long(d);
  20. jf=((d-yuan)*1000+5)/10;
  21. }
  22. RMB::RMB(unsigned d, unsigned c)
  23. {
  24.   yuan = d + c / 100;
  25.   jf = c % 100;
  26. }
  27. RMB RMB::operator+(RMB& s) const
  28. {
  29.   unsigned c = jf + s.jf;
  30.   unsigned d = yuan + s.yuan;
  31.   return RMB(d,c);
  32. }
  33. RMB& RMB::operator++()
  34. {
  35.   yuan+=(jf+1)/100;
  36.   jf=(jf+1)%100;
  37.   return *this;
  38. }
  39. RMB& RMB::operator+=(const RMB& r)
  40. {
  41. yuan+=r.yuan + (jf+r.jf)/100;
  42. jf=(jf+r.jf)%100;
  43. return *this;
  44. }
  45. RMB& RMB::operator-=(const RMB& r)
  46. {
  47.   if(yuan+jf/100.0 < r.yuan+r.jf/100.0){
  48. cout <<"error: the result is less than 0.n";
  49. return *this;
  50. }
  51.   yuan-=r.yuan-( (jf<r.jf) ?1:0);
  52. jf=(jf+100-r.jf)%100;
  53. return *this;
  54. }
  55. RMB RMB::operator*(double d)const
  56. {
  57.   double temp=(yuan+jf/100.0)*d;
  58. unsigned y = long(temp);
  59. unsigned j = ((temp-y)*1000+5)/10;
  60. return RMB(y,j);
  61. }
  62. RMB operator*(double d, const RMB& r){ return r * d; }
  63. void main()
  64. {
  65.   RMB d1(1, 60);
  66.   RMB d2(2, 50);
  67.   RMB d3(0, 0);
  68.   d3 = d1 + d2;
  69. d1 += d3;
  70.   d3 -= d2;
  71.   d1.display();
  72. d2.display();
  73. }