سلام.من برای یک کلاس اپراتورهای = و + و - و =+ و... رو پیاده سازی کردم.و هرکدوم از این اپراتور ها به صورت مستقل درست کار می کنند ولی وقتی مثلا می نویسم
BigNumber a,b,c;
c=a+b;
cout<<c<<endl;
برنامه exception میده.یعنی وقتی دیباگ می کنم وقتی به خط سوم میرسه برنامه بسته میشه.
class BigNumber
{
friend istream & operator >>(istream &c, BigNumber& num);
friend ostream & operator <<(ostream &c,const BigNumber num);
private:
string data;
public:
BigNumber (const BigNumber&);
BigNumber& operator =(BigNumber& const);
{;
BigNumber::BigNumber (const BigNumber& other)
{
data=other.data;
}
BigNumber& BigNumber::operator =(BigNumber& const m)
{
if(this==&m)
return *this;
data=m.data;
return *this;
}
istream & operator >>(istream &c, BigNumber& num)
{
c>>num.data;
return c;
}
ostream & operator <<(ostream &c,const BigNumber num)
{
c<<num.data;
return c;
}
با تشکر
string BigNumber::add (string &s1, string &s2){
int carry=0,sum,i;
string min=s1,
max=s2,
result = "";
if (s1.length()>s2.length()){
max = s1;
min = s2;
} else {
max = s2;
min = s1;
}
for (i = min.length()-1; i>=0; i--){
sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';
carry = sum/10;
sum %=10;
result = (char)(sum + '0') + result;
}
i = max.length() - min.length()-1;
while (i>=0){
sum = max[i] + carry - '0';
carry = sum/10;
sum%=10;
result = (char)(sum + '0') + result;
i--;
}
if (carry!=0){
result = (char)(carry + '0') + result;
}
return result;
}
BigNumber& BigNumber::operator +( BigNumber& other)
{
string result;
string A,B;
A=data;
B=other.data;
if((data[0]=='-')&&(other.data[0]=='-'))
{
A=A.erase(0,1);
B=B.erase(0,1);
result="-";
result+=add(A,B);
BigNumber n(result);
return n;
}
else if((data[0]=='-')&&(other.data[0]!='-'))
{
A=A.erase(0,1);
if(compare(A,B)==1)
{
result="-";
result+=sub(A,B);
}
else if(compare(A,B)==-1)
{
result=sub(A,B);
}
else
result='0';
BigNumber n(result);
return n;
}
else if((data[0]!='-')&&(other.data[0]=='-'))
{
B=B.erase(0,1);
if(compare(A,B)==1)
{
result=sub(A,B);
}
else if(compare(A,B)==-1)
{
result="-";
result+=sub(A,B);
}
else
result='0';
BigNumber n(result);
return n;
}
else
{
result=add(A,B);
BigNumber n(result);
return n;
}
}