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

运行结果:

猜你喜欢

转载自www.cnblogs.com/gongsuiqing/p/13174066.html