zoukankan      html  css  js  c++  java
  • c++语言友元函数和成员函数对运算符重载

    #include<iostream>
    using namespace std;
    /******************************************/
    /*use member function to overload operator*/
    /******************************************/
    class RMB{
    public:
        RMB(unsigned int d, unsigned int c);
        RMB operator + (RMB&);
        RMB& operator ++();
        void display(){
            cout <<"use member function overload operator"<<(yuan+jf/100.0) << endl;
        }
    protected:
        unsigned int yuan;
        unsigned int jf;
    };
    RMB::RMB(unsigned int d, unsigned int c){
        yuan = d;
        jf = c;
        while (jf >= 100){
            yuan++;
            jf -= 100;
        }
    }
    RMB RMB::operator + (RMB& s){
        unsigned int c = jf + s.jf;
        unsigned int d = yuan + s.yuan;
        RMB result(d, c);
        return result;
    }
    
    RMB& RMB::operator ++(){
        jf++;
        if (jf >= 100){
            jf -= 100;
            yuan++;
        }
        return *this;
    }
    /******************************************/
    /*use friend function to overload operator*/
    /******************************************/
    class RMBf{
    public:
        RMBf(unsigned int b, unsigned int a);
        friend RMBf operator+(RMBf&, RMBf&);  //two operands  while member function use just one operand
        friend RMBf& operator++(RMBf&);       //one operands  while member function use no operand
        void display(){ cout <<"use friend function to overload operator"<<(yuan+jf/100.0) << endl; }
    protected:
        unsigned int yuan;
        unsigned int jf;
    };
    RMBf::RMBf(unsigned int b, unsigned int a){
        yuan = b;
        jf = a;
        while (jf >= 100){
            yuan++;
            jf -= 100;
        }
    }
    RMBf operator + (RMBf& s1, RMBf& s2){  //needn't class name::operator name, more simple
        unsigned int c = s1.jf + s2.jf;
        unsigned int d = s1.yuan + s2.yuan;
        RMBf result(d, c);
        return result;
    }
    
    RMBf& operator ++(RMBf& s){
        s.jf++;
        if (s.jf >= 100){
            s.jf -= 100;
            s.yuan++;
        }
        return s;
    }
    void main(){
        RMB d1(1, 60);
        RMB d2(2, 50);
        RMB d3(0, 0);
        d3 = d1 + d2;
        ++d3;
        d3.display();
    
        RMBf f1(1, 60);
        RMBf f2(2, 50);
        RMBf f3(0, 0);
        f3 = f1 + f2;
        ++f3;
        f3.display();
        int i;
        cin >> i;
    }
  • 相关阅读:
    717 汉诺塔的非递归实现 (25分)
    JSP入门[续]
    JSP运行原理和九大隐式对象
    JSP入门
    Mysql基本命令
    DataGridView数据导出为Excel
    sql server 2005中如何添加外键
    自定义配置文件的读取
    WinForm(C#)CheckedlistBox绑定数据,并获得选中的值(ValueMember)和显示文本(DisplayMember
    No CurrentSessionContext configured Hibernate
  • 原文地址:https://www.cnblogs.com/bruceyo/p/3850733.html
Copyright © 2011-2022 走看看