Я пытался работать с оператором + функция, но это не похоже на работу ..
Не уверен, что не так: 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
поэтому он не может получить доступ к своим частным членам. Вы должны объявить это как друга класса вместо этого:
friend BigIn operator +(BigInt &, BigInt &);
Вы забыли results.Digits [я] в строке 4
BigInt BigInt::operator+(const BigInt &a)
{
BigInt result;
for(int i = 0; i < CAPACITY; i++)
result.Digits[i] = Digits[i] + a.Digits[i];
return result;
}