我又是在书上看的
请看下面例子
对象+double 与double+对象是不一样的;
如果你屏蔽掉那个 RMB(double)构造的话,你会发现都不能运行。必须再定义两个+
但如果按钱能书上说的定义为成员函数的话,就会出现
RMB operator+( RMB& s, double value);
RMB operator+( double value, RMB& s){return s+value;}
参数太多的错误,你若去掉后采用默认参数的话两个的参数又完全一样了,还是会报错。
我于是又改为友元的形式了
如下但还是有个错误不知道是怎么回事啊
源代码如下,请注意我加//部分是屏蔽掉的,不要加上去
//**********************
//** ch18_3.cpp **
//**********************
#include<iostream>
using namespace std;
class RMB
{
public:
RMB(unsigned int d, unsigned int c);
// RMB(double value);
RMB operator+(RMB&);
RMB& operator++();
friend RMB operator+( RMB& s, double value);
firend RMB operator+( double value, RMB& s){return s+value;}
void display(){ cout << (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(double value)
{
yuan=value;
jf=(value-yuan)*100+0.5;
}
*/
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;
}
friend RMB operator+ (RMB& s, double value)
{
s.yuan+=s.value;
s.jf=s.jf;
RMB temp(yuan, jf);
return temp;
}
int main()
{
RMB s (5,8);
s.display();
s=RMB(1,5)+s;
s.display();
s=1+s;
s.display();
s=s+RMB(1,5);
s.display();
s=s+1;
s.display();
return 0;
}
请帮帮忙吧