zoukankan      html  css  js  c++  java
  • c++实验5多态和运算符重载task3

    第三题:将以下程序更改为友元函数重载的形式并上机运行:

    #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();

    }

    修改后的友元函数程序(红色为关键代码):

    #include<iostream> 

    using namespace std;

    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; }
    friend RMB operator+(RMB a, RMB d) ;
    //人民币加的运算符重载
    friend RMB operator*(RMB a, double rate) ;
    private:
    unsigned int yuan; //元
    unsigned int jf; //角分

    };



    RMB operator+(RMB a, RMB d) {
    return RMB(a.yuan + d.yuan + (a.jf + d.jf) / 100);
    }
    RMB operator*(RMB a, double rate) {
    return RMB((a.yuan + a.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();
    }

    运行结果:

  • 相关阅读:
    java中的数组
    java中的break continue
    java 自加和短路问题 几个例子
    循环语句
    K-近邻算法小结
    数据结构与算法学习笔记 (三) 排序 搜索
    数据结构与算法学习笔记 (二) 栈 链表 队列 树 堆 图 并查集
    Spark数据分析技术学习笔记(一)——基础概念、RDD使用
    Python数据分析学习笔记
    Python机器学习(Sebastian著 ) 学习笔记——第六章模型评估与参数调优实战(Windows Spyder Python 3.6)
  • 原文地址:https://www.cnblogs.com/gongsuiqing/p/13174066.html
Copyright © 2011-2022 走看看