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

    运行结果:

  • 相关阅读:
    利用docker搭建RTMP直播流服务器实现直播
    基于.NET平台的Ocelot网关框架教程汇总
    docker swarm集群搭建及使用Portainer、shipyard
    Swarm 集群并用 Portainer 管理
    如何在Debian 9上安装和使用Docker
    人不成熟的五大特征:立即要回报、不自律、经常被情绪所左右、不愿学习、做事情不靠信念靠人言(你中了几条?)
    使用 xpath helper 提取网页链接
    Python 爬虫js加密破解(四) 360云盘登录password加密
    Python 爬虫js加密破解(三) 百度翻译 sign
    Python 获得最近一个月的每天的日期
  • 原文地址:https://www.cnblogs.com/gongsuiqing/p/13174066.html
Copyright © 2011-2022 走看看