-9

This is pacific question. The implementation of the class LargeInt will use a dynamic physical structure to store the individual digits of an integer, and will provide some basic I/O and arithmetic operations that can be performed on integers.

In particular, the class should include:

  1. A default constructor
  2. An operator function to overload the operator +
  3. An operator function to overload the operator ==
  4. An operator function to overload the operator <<
  5. An operator function to overload the operator >>

Note 1: since the LargeInt class does not contain pointers, there is no need for a copy constructor or a destructor.

#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;
}

when I build it, it has a error like this

Warning 1 warning C4172: returning address of local variable or temporary.

mindriot
  • 5,413
  • 1
  • 25
  • 34

1 Answers1

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

remove the & and your warning should go away. Right now the return is referencing a variable t, which is local to the function which has gone out of scope by the time the calling function catches the return.

Aumnayan
  • 671
  • 3
  • 12