C++初学遇到的有关问题,请。
C++初学遇到的问题,请高手指点。。
#include "iostream.h"
class fraction
{
long numbera;
long denomi;
long gcd(long a,long b);
public:
fraction()
{
numbera=0;
denomi=1;
}
fraction(long a,long b=1);
void disp();
fraction operator+(fraction &dt2);
fraction operator+(long dt2);
fraction operator-(long dt1,fraction &dt2);
};
fraction::fraction(long a,long b)
{
long wk;
if(b<=0)
b=1;
wk=gcd(a,b);
numbera=a/wk;
denomi= b/wk;
}
fraction fraction::operator+(fraction &dt2)
{
long mul1,mul2;
mul1=numbera*dt2.denomi+dt2.numbera*denomi;
mul2=denomi*dt2.denomi;
return fraction(mul1,mul2);
}
fraction fraction::operator+(long dt2)
{
return fraction(numbera+denomi*dt2,denomi);
}
long fraction::gcd(long a,long b)
{
long wk;
while(b!=0)
{
a=a%b;
wk=a;
a=b;
b=wk;
}
return a;
}
void fraction::disp()
{
cout<<numbera<<"/"<<denomi<<'\n';
}
fraction fraction::operator-(long dt1,fraction &dt2)
{
return fraction(dt1*dt2.denomi+dt2.numbera,dt2.denomi);
}
void main()
{
fraction a(4,16),b(1,6),c(5),d;
cout<<"初始值:\n";
a.disp();
b.disp();
c.disp();
d.disp();
cout<<"a+b的结果:\n";
c=a+b;
c.disp();
cout<<"a+2的结果:\n";
c=a+6;
c.disp();
d=2+a;
d.disp();
}
编译报错:
F:\C++习题集\practice.cpp(2737) : error C2804: binary 'operator -' has too many parameters
F:\C++习题集\practice.cpp(2804) : error C2677: binary '+' : no global operator defined which takes type 'class fraction' (or there is no acceptable conversion)
执行 cl.exe 时出错.
有个疑问是,为什么不能这样定义fraction fraction::operator-(long dt1,fraction &dt2)
呢,如果不能这样定义,定义成 friend fraction operator+(long dt1,fraction &dt2)为什么 又可以了呢?谢谢。。
#include "iostream.h"
class fraction
{
long numbera;
long denomi;
long gcd(long a,long b);
public:
fraction()
{
numbera=0;
denomi=1;
}
fraction(long a,long b=1);
void disp();
fraction operator+(fraction &dt2);
fraction operator+(long dt2);
fraction operator-(long dt1,fraction &dt2);
};
fraction::fraction(long a,long b)
{
long wk;
if(b<=0)
b=1;
wk=gcd(a,b);
numbera=a/wk;
denomi= b/wk;
}
fraction fraction::operator+(fraction &dt2)
{
long mul1,mul2;
mul1=numbera*dt2.denomi+dt2.numbera*denomi;
mul2=denomi*dt2.denomi;
return fraction(mul1,mul2);
}
fraction fraction::operator+(long dt2)
{
return fraction(numbera+denomi*dt2,denomi);
}
long fraction::gcd(long a,long b)
{
long wk;
while(b!=0)
{
a=a%b;
wk=a;
a=b;
b=wk;
}
return a;
}
void fraction::disp()
{
cout<<numbera<<"/"<<denomi<<'\n';
}
fraction fraction::operator-(long dt1,fraction &dt2)
{
return fraction(dt1*dt2.denomi+dt2.numbera,dt2.denomi);
}
void main()
{
fraction a(4,16),b(1,6),c(5),d;
cout<<"初始值:\n";
a.disp();
b.disp();
c.disp();
d.disp();
cout<<"a+b的结果:\n";
c=a+b;
c.disp();
cout<<"a+2的结果:\n";
c=a+6;
c.disp();
d=2+a;
d.disp();
}
编译报错:
F:\C++习题集\practice.cpp(2737) : error C2804: binary 'operator -' has too many parameters
F:\C++习题集\practice.cpp(2804) : error C2677: binary '+' : no global operator defined which takes type 'class fraction' (or there is no acceptable conversion)
执行 cl.exe 时出错.
有个疑问是,为什么不能这样定义fraction fraction::operator-(long dt1,fraction &dt2)
呢,如果不能这样定义,定义成 friend fraction operator+(long dt1,fraction &dt2)为什么 又可以了呢?谢谢。。
相关解决方案