gpt4 book ai didi

c++ - 重载 << 和 >> 运算符 : The program compiles but running it doesn't accept input

转载 作者:行者123 更新时间:2023-12-02 18:33:54 25 4
gpt4 key购买 nike

我正在尝试实现一个 Fraction 类,它计算两个分数的乘积。它编译正常,但不接受输入并突然结束。

这是我的代码:

#include<iostream>
#include<cmath>
using namespace std;
class Fraction{
int m_numerator{0},m_denominator{1};
public:
Fraction(int numerator=0,int denominator=1):m_numerator{numerator},m_denominator{denominator}{
}

friend Fraction operator*(const Fraction &f1,const Fraction &f2);
friend Fraction operator*(const Fraction &f,int n);
friend Fraction operator*(int n,const Fraction &f);
friend ostream &operator<<(ostream &out,const Fraction &f){
out<<f.m_numerator<<'/'<<f.m_denominator;
return out;
}
friend istream &operator>>(istream &in,const Fraction &f);
};
istream &operator>>(istream &in,const Fraction &f){
in>>f.m_numerator;
in>>f.m_denominator;
return in;
}
Fraction operator*(const Fraction &f1,const Fraction &f2){
return Fraction{f1.m_numerator*f2.m_numerator,f1.m_denominator*f2.m_denominator};
}
Fraction operator*(const Fraction &f,int n){
return Fraction(n*f.m_numerator,f.m_denominator);
}
Fraction operator*(int n,const Fraction &f){
return Fraction(n*f.m_numerator,f.m_denominator);
}

int main(){
Fraction f1;
cin>>f1;

Fraction f2;
cin>>f2;

std::cout << f1 << " * " << f2 << " is " << f1 * f2 << '\n';
return 0;
}

谁能告诉我哪里错了?

最佳答案

问题在于 operator>> 第二个参数上的 const 限定符。首先,这看起来有点奇怪,因为您想要在将值作为输入给出时修改它们。其次,由于采用 const int 操作数的 >> 运算符没有默认重载,因此最佳(仅?)匹配内部 >> 操作是函数本身 - 这会导致无限递归。

要解决此问题,只需删除 const 限定符即可:

istream& operator>>(istream& in, Fraction& f)
{
in >> f.m_numerator;
in >> f.m_denominator;
return in;
}

(同样,在声明中。)


注意:为了解决注释中提出的问题,关于正确读取用斜杠指定的分数(即像 3/4 这样的输入),您可以简单地在两行之间添加以下行读取分子和分母:

    char slash;  in >> slash; // Skip the slash.

关于c++ - 重载 << 和 >> 运算符 : The program compiles but running it doesn't accept input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69064456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com