【发布时间】:2020-03-10 15:19:45
【问题描述】:
我正在做一个家庭作业练习,我必须为分数创建一个类,但是当我编码时,我遇到了运算符
#include <iostream>
using namespace std;
class Frazione{
private:
int num;
int den;
public:
Frazione operator+(Frazione f2){
Frazione risultato;
risultato.den=MCM(f2.den);
risultato.num=(num*(risultato.den/den))+(f2.num*(risultato.den/f2.den));
return risultato;
}
int MCM(int a){
int min;
int k;
if(den>a){
min=a;
}
else{
min=den;
}
for(int i=min;!(den%i==0 && a%min==0);i+=min){
k=i;
}
return k;
}
void setn(int a){
num=a;
}
void setd(int a){
den=a;
}
int getn(){
return num;
}
int getd(){
return den;
}
};
istream& operator>>(istream& in,Frazione f){
int n,d;
cout<<"Dimmi il numeratore"<<endl;
in>>n;
cout<<"Dimmi il denominatore"<<endl;
in>>d;
f.setn(n);
f.setd(d);
return in;
}
ostream& operator<<(ostream& out,Frazione& f){
out<<f.getn();
out<<"/";
out<<f.getd();
return out;
}
int main(){
Frazione f1,f2,f3;
cin>>f1;
cout<<f1;
cin.get();
return 0;
}
目前不关注funciont MCM和operator+,因为它们是我必须实现的功能,然后我会解决这个问题。
【问题讨论】:
-
您的
operator >>采用Frazione参数按值,而不是按引用。您正在将输入读取到副本中,并且该副本在函数完成后被丢弃 -
@Yksisarvinen 谢谢,所以随着运算符的重载>>我总是必须通过引用来使用
-
另一方面,您的
operator<<确实将Frazzione作为非常量引用,而实际上它并没有修改它。方法getd应声明为const -
@ric 当它用于从流中输入数据时,那么(可能)是的,它应该总是通过引用。至少我想不出任何不应该这样使用它的好例子。
标签: c++ function class object overloading