我无法弄清楚为什么我的BigInt实例以及自定义向量类(BigIntVector)在返回+ = into +函数时会发生变化。在main.cpp中查看我的示例,我们有40 +( - 30),在我的BigInt.cpp代码中意味着它会将其转换为40-30(然后在结尾处打印否定符号,因为' isPositive' bool是假的)。使用调试器,我肯定知道 - =将正确的值10返回到+ =。因此,在+ =' tempThis'包含10中的向量,并返回+函数。但是当它返回到+功能时,' tempThis'在那范围变成40?有什么理由吗?
谢谢。
BigInt.cpp补充
// binary addition
BigInt BigInt::operator+(BigInt const& other) const {
BigInt tempThis = BigInt(*this);
tempThis += other; //tempThis becomes 40 which isn't 10 for 40-30!!!!!!!
return tempThis;
}
// compound addition-assignment operator
BigInt BigInt::operator+=(BigInt const& other) {
if (!other.isPositive) {
BigInt tempThis = BigInt(*this);
tempThis -= other; //tempThis is correctly assigned 10 for 40-30!!!!!!!!
cout << "get element at 0 +=: " << tempThis.bigIntVector->getElementAt(0) << endl;
return tempThis;
}
的main.cpp
BigInt num11 = -30;
cout << "num11 (-30): " << num11 << endl;
BigInt num12 = 40;
cout << "num12 (40): " << num12 << endl;
BigInt num13 = num12 + num11;
cout << "num13 (-10): " << num13 << endl;
打印:
num11(-30): - 30
num12(40):40
num13(-10):40
答案 0 :(得分:2)
你错过了赋值运算符的重载,你需要返回对BigInt的引用,即
BigInt& BigInt::operator+(BigInt const& other) const
答案 1 :(得分:2)
您的复合添加分配运算符viewWillAppear
应为:
签名应为:
+=
在其中,您不想使用临时值,或者如果您有可能发生的故障情况并希望保证行为,请使用临时变量,然后覆盖您的&#39;这个&#39 ;对象,如果成功。
查看此页面:http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html 欲获得更多信息。在页面内搜索&#34;复合赋值运算符&#34;如果你不想阅读整篇文章。