Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱
随笔 - 172, 文章 - 0, 评论 - 257, 引用 - 0
数据加载中……

c++ 操作符重载

//例子 :
/**
 * 操作符重载*/
#include <iostream>

using namespace std;

class RMB{
  private:
    unsigned int yuan; //元
    unsigned int jf; //角分
  public:
 
    RMB(double d){
      yuan = static_cast<unsigned int> (d);
      jf = static_cast<unsigned int> ((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);
    }
};

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;
}

int main(){
  RMB x =10000.0;
  double yrate=0.035;
  expense1(x,yrate).display();
  expense2(x,yrate).display();
  return 1;
}

//以上代码在gcc mingw windows环境中编译通过

操作符重载注意事项 :
1 "." , "::" , ".*" , ".->" , "?:" 这5个操作符在c++标准中是不允许重载的,也不可以创造新的操作符
2 操作符在重载后运算优先级保持不变
3 重程序易读性上考虑,操作符重载尽量不要悖弃操作符的本意

posted on 2004-12-29 23:32 Khan 阅读(911) 评论(0)  编辑 收藏 引用 所属分类: GCC/G++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理