所以,我对操作符重载很新,我无法获得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中什么都没有。
希望你能帮助我!谢谢!EDIT !!!:
我忘了为我的运营商列出我的错误&lt;功能:
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
答案 0 :(得分:2)
if (rit1 > rit2)
应该是if (*rit1 > *rit2)
,因为你想要比较迭代器的内容而不是它们自己的迭代器。