这是C ++程序,关于添加两个数字

时间:2016-05-20 17:04:02

标签: c++

这是太平洋问题。类LargeInt的实现将使用动态物理结构来存储整数的各个数字,并提供一些可以对整数执行的基本I / O和算术运算。

特别是,该课程应包括:

  1. 默认构造函数
  2. 重载operator +
  3. 的运算符函数
  4. 重载operator ==
  5. 的运算符函数
  6. 重载operator <<
  7. 的运算符函数
  8. 重载operator >>
  9. 的运算符函数

    注1:由于LargeInt类不包含指针,因此不需要复制构造函数或析构函数。

    #include "targetver.h"
    using namespace std;
    
    class LargeInt
    {
    private:
      char datain[200];
      int databit[200];
      int len;
      int overflow;
      LargeInt(char *x, int inlen)
      {
        int i = 0;
        int j = inlen - 1;
        len = inlen;
        overflow = 0;
        for (i = 0; i < 200; i++)
        {
          databit[i] = 0;
          datain[i] = '\0';
        }
        for (i = 0; i < len; i++)
        {
          datain[i] = x[j];
          j--;
        }
      }
      ~LargeInt();
      void GetDataBit()
      {
        int i = 0;
        for (i; i < len; i++)
          databit[i] = datain[i] - 48;
      }
    public:
      LargeInt& operator+(LargeInt& data);
      bool operator==(LargeInt& data);
      LargeInt& operator>>(int x);
      LargeInt& operator<<(int x);
    };
    
    bool LargeInt::operator==(LargeInt& data)
    {
      if (this->len != data.len)
        return false;
      else
      {
        for (int i = 0; i < 200; i++)
        {
          if (this->databit[i] == data.databit[i])
            continue;
          else
            return false;
        }
        return true;
      }
    }
    
    LargeInt& LargeInt::operator+(LargeInt& data)
    {
      LargeInt t("0", 0);
      int addlen;
      if (this->len > data.len)
        addlen = this->len;
      else
        addlen = data.len;
      for (int i = 0; i < addlen; i--)
      {
        t.databit[i] = (data.databit[i] + this->databit[i] + t.overflow) % 10;
        if ((data.databit[i] + this->databit[i] + t.overflow) >= 10)
          t.overflow = 1;
      }
      t.len = addlen;
      for (int i = 0; i < addlen; i++)
      {
        t.datain[i] = t.databit[i] + 48;
      }
    
      return t;
    }
    

    当我构建它时,它有一个像这样的错误

      

    警告1警告C4172:返回本地变量的地址或临时。

1 个答案:

答案 0 :(得分:0)

LargeInt& LargeInt::operator+(LargeInt& data)

删除&amp;你的警告应该消失。现在,返回引用了一个变量t,它是函数的本地变量,在调用函数捕获返回时已超出范围。