Перегрузка operator-, operator & lt; и operator & gt;

Итак, я очень плохо знаком с перегрузкой операторов и не могу получить синтаксис для operator-, operator> и operator< вниз.

Мне дали код оператора + для моего кода, и мне трудно изменить его на оператор-функцию. Я также получаю много ошибок для моего оператора< функция, но не мой оператор> функция, которая в основном то же самое.

Если бы вы могли пролить некоторый свет на то, как это сделать, и / или предоставить мне ссылки для получения дополнительной помощи, это будет с благодарностью.

Это то, что я до сих пор:

(Как вы можете видеть, я только скопировал и вставил оператор + в мой оператор-, чтобы попытаться объяснить это)

BigInt.cpp

#include <iostream>
#include <string>
#include "BigInt.h"
using namespace std;

BigInt BigInt::operator+(BigInt operand)
{
int carry = 0;
int sum;
BigInt result;
list<int>::reverse_iterator rit1 = number.rbegin();
list<int>::reverse_iterator rit2 = operand.number.rbegin();
while ( (rit1 != number.rend()) || (rit2 != operand.number.rend()) )
{
sum = 0;

if (rit1 != number.rend())
{
sum += *rit1;
rit1++;
}

if (rit2 != operand.number.rend())
{
sum += *rit2;
rit2++;
}

sum += carry;
result.number.push_front(sum % 10);
carry = sum / 10;
}

if (carry > 0)
result.number.push_front(carry);

return result;
}

void BigInt::display(ostream & out)
{
for (list<int>::iterator it = number.begin(); it != number.end(); it++)
{
cout << *it;
}

cout << endl;
}void BigInt::read(istream & in)
{
string input;

cin >> input;

for (int i = 0; i < input.length(); ++i)
{
int x = input.at(i);
int y = char(x) - char('0');
number.push_back(y);
}}

bool BigInt::operator<(BigInt operand)
{
list<int>::reverse_iterator rit1 = number.rbegin();
list<int>::reverse_iterator rit2 = operand.number.rbegin();
int count1 = 0, count2 = 0;
bool check;
while ( (rit1 != number.rend()) || (rit2 != operand.number.rend()) )
{
if (rit1 > rit2)
{
count1++;
rit1++;
rit2++;
}
else if (rit2 > rit1)
{
count2++;
rit1++;
rit2++;
}
else
{
rit1++;
rit2++;
}

}
if(count1 < count2)
{
check = true;
}
else
{
check = false;
}

return check;
}

bool BigInt::operator>(BigInt operand)
{
list<int>::reverse_iterator rit1 = number.rbegin();
list<int>::reverse_iterator rit2 = operand.number.rbegin();
int count1 = 0, count2 = 0;
while ( (rit1 != number.rend()) || (rit2 != operand.number.rend()) )
{
if (rit1 > rit2)
{
count1++;
rit1++;
rit2++;
}
else if (rit2 > rit1)
{
count2++;
rit1++;
rit2++;
}
else
{
rit1++;
rit2++;
}

}
if( count1 > count2)
{
return true;
}
else
{
return false;
}}

bool BigInt::operator==(BigInt operand)
{
list<int>::reverse_iterator rit1 = number.rbegin();
list<int>::reverse_iterator rit2 = operand.number.rbegin();do
{
rit1++;
rit2++;
}
while(rit1 == rit2);

return false;

}

BigInt BigInt::operator-(BigInt operand)
{
int carry = 0;
int sum;
BigInt result;
list<int>::reverse_iterator rit1 = number.rbegin();
list<int>::reverse_iterator rit2 = operand.number.rbegin();
while ( (rit1 != number.rend()) || (rit2 != operand.number.rend()) )
{
sum = 0;

if (rit1 != number.rend())
{
sum += *rit1;
rit1++;
}

if (rit2 != operand.number.rend())
{
sum += *rit2;
rit2++;
}

sum += carry;
result.number.push_front(sum % 10);
carry = sum / 10;
}

if (carry > 0)
result.number.push_front(carry);

return result;
}

BigInt.h

#include <list>
using namespace std;

class BigInt
{
public:
BigInt() {};
void read(istream & in);
void display(ostream & out);
BigInt operator+(BigInt operand); //overloading operator
BigInt operator-(BigInt operand); //subtraction
bool operator<(BigInt operand);
bool operator>(BigInt operand);
bool operator==(BigInt operand);
list<int> number; //using STL list
};

У меня пока нет ничего в моем main.cpp.

Надеюсь, вы можете помочь мне! Спасибо!

РЕДАКТИРОВАТЬ!!!:

Я забыл перечислить свои ошибки для моего оператора< функция:

Error   10  error C2676: binary '<' : 'std::_List_iterator<_Mylist>' does not define this operator or a conversion to a type acceptable to the predefined operator  c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   4   error C2784: 'bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'std::_List_iterator<_Mylist>' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   8   error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_iterator<_Mylist>'    c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   3   error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'std::_List_iterator<_Mylist>'   c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   5   error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'std::_List_iterator<_Mylist>' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   2   error C2784: 'bool std::operator <(const std::list<_Ty,_Alloc> &,const std::list<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::list<_Ty,_Alloc> &' from 'std::_List_iterator<_Mylist>'   c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   6   error C2784: 'bool std::operator <(const std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::move_iterator<_RanIt> &' from 'std::_List_iterator<_Mylist>'   c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   9   error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'std::_List_iterator<_Mylist>'  c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014
Error   7   error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_List_iterator<_Mylist>'  c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 1014

1

Решение

if (rit1 > rit2) должно быть if (*rit1 > *rit2) так как вы хотите сравнить содержимое итераторов, а не сам итератор.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector