gpt4 book ai didi

c++ - 重载 = 在 bignum 实现中

转载 作者:行者123 更新时间:2023-11-28 06:26:58 25 4
gpt4 key购买 nike

我正在编写一个 bignum 实现,并在其中重载了运算符 + 和 =。这是我的代码:

BigNum& operator+(const BigNum& b ) {
BigNum sum;
int carry=0;
for (int i=0; i<N;i++){
sum.dig[i]=(dig[i]+b.dig[i]+carry)%10;
carry=(dig[i]+b.dig[i]+carry)/10;
}
return sum;
}

BigNum& operator=(const BigNum& rhs ) {
for (int i=0; i<N; i++){
dig[i]=rhs.dig[i];
}
return *this;
}

它们似乎都独立运行良好(我可以正确地将一个 bignum 分配给一个 bignum 并正确地添加两个 bignum)但是当我尝试将它们组合在一起时,我得到的答案似乎是随机的。所以如果 a 和 b 是大数,我可以说

BigNum c=b;

cout<<a+b;

但是

a=a+b;

给出了意想不到的结果。

最佳答案

您正在从 + 运算符返回对局部变量 sum 的引用。您不能有意义地返回对局部变量的引用或指针。由于此错误,您的代码行为未定义,这就是您出现“意外结果”的原因。

因为你正在实现一个普通的二进制+,你必须按值返回结果

BigNum operator +(const BigNum& b) const {
BigNum sum;
...
return sum;
}

作为附加说明,二进制 + 作为独立(可能是 friend )函数更有意义,而不是作为类成员。如果您想将其保留为类成员,至少将其声明为 const(见上文)。

另一个问题是dig 是什么,N 是什么以及您的类(class)是否违反了三原则。但是从你发布的内容来看是不可能的。

关于c++ - 重载 = 在 bignum 实现中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358044/

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