c++ - BigInt 运算符+函数?

标签 c++ bigint

<分区>

我一直在尝试使用 operator+ 函数,但它似乎不起作用。 不确定哪里出了问题:s

BigInt.h

#include <iostream>
using namespace std;
using std::cout;

#ifndef BIGINT_H
#define BIGINT_H

class BigInt
{
//input and output operators
   friend istream & operator >> (istream &, BigInt &);
   friend ostream & operator << (ostream &, const BigInt &);

//overloaded operators
   BigInt operator + (BigInt &, BigInt &);

public:
   BigInt(); //default constructor
   BigInt(int); //initializes array with user-specified numbers

  // BigInt operator +(const BigInt &); //???

   void display(); //prints array

private:
   static const int CAPACITY = 40;
   int Digits[CAPACITY]; //stores all digits

};
#endif

BigInt.cpp

#include <iostream>
#include "BigInt.h"
using std::cout;

BigInt::BigInt()
{
   for (int i = 0; i < CAPACITY; i++)
      Digits[i] = 0;
}

BigInt::BigInt(int InitNum)
{
   for(int i = 0; i < CAPACITY; ++i)
      Digits[i] = 0;

   for (int i = 0; InitNum != 0 ; ++i)
   {
      Digits[i] = (InitNum % 10);
      InitNum = InitNum / 10;
   }
}

//------------------------------------------------------------------
BigInt operator +(BigInt & lhs, BigInt & rhs)
{
   BigInt results;
   int carry = 0;

   for (int i = 39 ; i >= 0; i--)
   {
      int indexAddition = lhs.Digits[i] + rhs.Digits[i] + carry;
      if (indexAddition > 9)
         carry = 1;
      else
         carry = 0;

      results.Digits[i] %= 10;
   }

   return results;
}

//-----------------------------------------------------------------
bool BigInt::operator == (const BigInt & rhs)
{
   for(int i = 0; i < CAPACITY; i++)
   {
      if (Digits[i] != rhs.Digits[i])
         return false;
   }
   return true;
}

//-----------------------------------------------------------------
ostream & operator << (ostream & cout, const BigInt& a)
{
   for(int i = a.CAPACITY - 1; i >= 0 ; i--)
      cout << a.Digits[i];

   cout << "\n";

   return cout;
}

istream & operator >> (istream & cin,  BigInt& a)
{
   for(int i = 0; i < a.CAPACITY; i++)
      cin >> a.Digits[i];

   return cin;
}

//---------------------------------------------------------------
void BigInt::display()
{
   for(int i = CAPACITY - 1; i >= 0; i--)
      cout << Digits[i];

   cout << "\n";
}

main.cpp

#include <iostream>
#include <cstdlib>
#include <fstream>
#include "BigInt.h"

int main()
{
   BigInt object1(45756369);
   BigInt object2(47435892);

   cout << object1;
   object2.display();

   BigInt object3 = object1 + object2;

   cout << object3;

   return 0;
}

当我尝试使用

 BigInt operator +(const BigInt &); 

,这是这样实现的:

BigInt::operator +(const BigInt &a)
{
   BigInt result;

   for(int i = 0; i < CAPACITY; i++)
      result = Digits[i] + a.Digits[i];

   return result;
}

我会得到这个错误:

BigInt.cpp: In function âBigInt& operator+(const BigInt&)â:
BigInt.cpp:36:23: error: âCAPACITYâ was not declared in this scope
BigInt.cpp:37:16: error: âDigitsâ was not declared in this scope
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:37:30: error: within this context
BigInt.cpp:34:11: warning: reference to local variable âresultâ returned [enabled by default]

当我使用

BigInt operator +(BigInt & lhs, BigInt & rhs)
{
   BigInt results;
   int carry = 0;

   for (int i = 39 ; i >= 0; i--)
   {
      int indexAddition = lhs.Digits[i] + rhs.Digits[i] + carry;

      if (indexAddition > 9)
         carry = 1;
      else
         carry = 0;

      results.Digits[i] %= 10;
   }

   return results;
}


In file included from BigInt.cpp:9:0:
BigInt.h:31:39: error: âBigInt BigInt::operator+(BigInt&, BigInt&)â must take either zero or one     argument
BigInt.h: In function âBigInt operator+(BigInt&, BigInt&)â:
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:50:27: error: within this context
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:50:43: error: within this context
BigInt.h:50:23: error: âint BigInt::Digits [40]â is private
BigInt.cpp:57:11: error: within this context

为什么? 谢谢!

最佳答案

operator+ 函数不是 BigInt 的成员,因此它无法访问其中的私有(private)成员。您应该将其声明为类的友元:

friend BigIn operator +(BigInt &, BigInt &);

关于c++ - BigInt 运算符+函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678609/

相关文章:

c++ - 传递 boost::asio::ip::tcp::socket

c++ - 迭代和修改C++优先级队列

javascript - 如何使用 GraphQL 处理 long Int?

mongodb - 如何将 Golang big.Int 存储到 MongoDB 中

scala - 在 Scala 中找不到 BigInt 的 intValueExact

c++ - 当服务器重新启动并且客户端收到 WSAECONNRESET 错误代码时,我是否应该重新创建整个套接字

c++ - 如何创建一个非常大的唯一整数数组?

c++ - Windows 上的串行 (COM) 端口重新连接

mysql - mysql上需要大于20位的整数怎么办?

java - 为什么他们甚至在被要求之前就持有这么多实例(33)?他们从哪里得到数字 16?