从函数返回错误的实例

时间:2015-11-10 04:52:10

标签: c++ function return instance biginteger

我无法弄清楚为什么我的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

2 个答案:

答案 0 :(得分:2)

你错过了赋值运算符的重载,你需要返回对BigInt的引用,即

BigInt& BigInt::operator+(BigInt const& other) const 

答案 1 :(得分:2)

您的复合添加分配运算符viewWillAppear应为:

  1. 修改自己的价值;和
  2. 返回对自身的引用,而不是其值的副本。
  3. 签名应为:

    +=

    在其中,您不想使用临时值,或者如果您有可能发生的故障情况并希望保证行为,请使用临时变量,然后覆盖您的&#39;这个&#39 ;对象,如果成功。

    查看此页面:http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html 欲获得更多信息。在页面内搜索&#34;复合赋值运算符&#34;如果你不想阅读整篇文章。