c++ - 错误在哪里,为什么这个程序是错误的?
问题描述
我正在做一个家庭作业练习,我必须为分数创建一个类,但是当我编码时,我遇到了运算符 << 的重载问题,我不明白错误在哪里,因为当程序读取输入,两个数字(分子,分母)被正确保存,但是当我尝试在输出中打印分数时,它给了我一个随机数;为什么?
#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+,因为它们是我必须实现的功能,然后我会解决这个问题。
解决方案
您在这里错过了第二个参数的参考:
istream& operator>>(istream& in,Frazione &f)
参数 f 只能通过引用访问。
推荐阅读
- ssis - 在上传到 SFTP 之前无法使用 WinSCP 脚本验证文件
- r - 在数据集中过滤“因子”类型的列?
- django - 将数据从按钮传输到下一页的发布表单。姜戈
- dart - 在颤动中从文本字段中获取价值的问题
- java - 从 shell 运行依赖于其他类的 java 程序
- php - 如何使用php从txt文件中删除带空格的行
- php - Visual Composer 正确渲染循环
- javascript - 如何将字符串形式的任何公式转换为实际公式并使用 Angular6 实现动态创建的形式?
- asp.net - 从子文件夹重定向到新域?
- javascript - 生成缩略图并上传到节点中的 s3 存储桶的最佳方法是什么?