注册 登录
编程论坛 C++教室

运算符重载

zhanghang123 发布于 2010-11-25 23:17, 965 次点击
#include<iostream.h>

class RMB{           //人民币类
public:
  RMB(double d){ yuan=d; jf=(d-yuan)/100; }
  RMB interest(double rate);          //计算利息
  RMB add(RMB d);                     //人民币加
  void display(){ cout <<(yuan + jf / 100.0) << endl; }
  RMB operator+(RMB d){ return RMB(yuan+d.yuan+(jf+d.jf)/100); }
                                      //人民币加的运算符重载
  RMB operator*(double rate){ return RMB((yuan+jf/100)*rate);}
private:
  unsigned int yuan;                  //元
  unsigned int jf;                    //角分
};

RMB RMB::interest(double rate)
{
  return RMB((yuan + jf / 100.0) * rate);
}
RMB RMB::add(RMB d)
{
  return RMB(yuan + d.yuan + jf / 100.0 + d.jf / 100.0);
}

//以下是计算应付人民币的两个版本
RMB expense1(RMB principle, double rate)
{
  RMB interest = principle.interest(rate);
  return principle.add(interest);
}

RMB expense2(RMB principle, double rate)
{
  RMB interest = principle * rate;    //本金乘利息
  return principle + interest;        //连本带利
}

void main()
{
  RMB x = 10000.0;
  double yrate = 0.035;
  expense1(x,yrate).display();
  expense2(x,yrate).display();
}
运行结果:
10350
10350
在上述程序中,输出结果为何不是double型的?
12 回复
#2
xanxus2010-11-26 10:48
你元跟角分都定义为int型了啊
#3
zhoufeng19882010-11-26 11:59
....
#4
laoyang1032010-11-26 15:31
cout <<(float)(yuan + jf / 100.0) << endl;
强制转化一下  就ok啦~
#5
zhanghang1232010-11-26 23:34
回复 2楼 xanxus
但cout <<(yuan + jf / 100.0) << endl中jf/100.0结果不应该是double型吗?
#6
zhanghang1232010-11-26 23:37
回复 4楼 laoyang103
但源程序中没强制转化啊?int与double转化后也应该是double型啊
#7
xanxus2010-11-27 17:21
回复 5楼 zhanghang123
怎么会是double型呢,像jf,你定义为int型,执行if/100语句的结果系统会把它判为int型的好不
举个例子
    int a;
    a=10;
    cout<<a/100<<endl;
LZ觉得结果是什么?
0.1?



结果是0

[ 本帖最后由 xanxus 于 2010-11-27 17:23 编辑 ]
#8
laoyang1032010-11-27 18:24
那你在转化一下不可以吗?
#9
zhanghang1232010-11-27 23:15
回复 8楼 laoyang103
hehe,这是我在教材上看到的一个例子,不是我自己写的程序。
#10
zhanghang1232010-11-27 23:22
回复 7楼 xanxus
jf/100.0,不是jf/100.
#11
xanxus2010-11-28 10:50
回复 10楼 zhanghang123
我没看到,你那jf/100.0是对的,但是
大哥啊,结果本来就是那个整数,虽然是double型,VC如果发现小数点后没有数字,不会输出小数点后面的0的
否则的话全部输出double型后面的0,10多个呢
你觉得VC会允许出现这中BUG吗???
#12
kittel2010-11-29 13:13
回复 楼主 zhanghang123
RMB(double d){ yuan=d; jf=(d-yuan)/100; }
你这个jf应该是(d-yuan)*100才对吧,而且也没返回值,??
最后的利息,你是不是可以这样添加cout.presicion(5);输出精度为5位。
还有很多地方看不懂了。。可能是我菜

#13
zhanghang1232010-11-29 23:52
回复 11楼 xanxus
有道理!
1