gpt4 book ai didi

c++ - 重载 operator-、operator< 和 operator >

转载 作者:行者123 更新时间:2023-11-30 04:06:03 28 4
gpt4 key购买 nike

<分区>

所以,我对运算符重载非常陌生,我无法理解运算符-、运算符> 和运算符< 的语法。

为我的代码提供了 operator+ 代码,我很难将其更改为 operator- 函数。我的 operator< 函数也收到很多错误,但我的 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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com