【问题标题】:where's the error and why this program is wrong?错误在哪里,为什么这个程序是错误的?
【发布时间】: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 &gt;&gt; 采用Frazione 参数按值,而不是按引用。您正在将输入读取到副本中,并且该副本在函数完成后被丢弃
  • @Yksisarvinen 谢谢,所以随着运算符的重载>>我总是必须通过引用来使用
  • 另一方面,您的 operator&lt;&lt; 确实将 Frazzione 作为非常量引用,而实际上它并没有修改它。方法getd 应声明为const
  • @ric 当它用于从流中输入数据时,那么(可能)是的,它应该总是通过引用。至少我想不出任何不应该这样使用它的好例子。

标签: c++ function class object overloading


【解决方案1】:

你这里漏掉了第二个参数的引用:

istream& operator>>(istream& in,Frazione &f)

参数 f 只能通过引用访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多