اشکال در ترکیب دو اپراتور - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

اشکال در ترکیب دو اپراتور

+1 امتیاز

سلام.من برای یک کلاس اپراتورهای = و + و - و =+ و... رو پیاده سازی کردم.و هرکدوم از این اپراتور ها به صورت مستقل درست کار می کنند ولی وقتی مثلا می نویسم 

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;
	}
}

 

سوال شده فروردین 12, 1393  بوسیله ی maryam (امتیاز 338)   12 33 44
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade
کدتون یکسری مشکل جزیی داره ولی هیچ کدوم باعث خطا  زمان اجرا نمیشن
مشکل از + که نوشتین هستش .
من اپراتور + رو داخل سوال گذاشتم.البته این مشکل برای اپراتور های دیگه مثل - هست.ببخشید اگر بخوام بنوسیم cin>>num1>>num2; و cout<<num1*num2  یا  ; cout<<num1+num2 باید داخل تابع های cin  و cout چه تغییری اعمال کنیم؟
تمام مواردی که گفتین الان درست کار می کنن  . نیاز به اضافه کردن چیز خاصی نیست .

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

خطا به خاطر اینه که مقدار بازگشتی operator +  باید با مقدار باشه (مقدار += با آدرس هستش )

BigNumber  BigNumber::operator +( BigNumber& other)

اپراتور های >> و << هم یکم مشکل دارن

ostream & operator <<(ostream &c,const BigNumber num) -->
ostream & operator <<(ostream &c,const BigNumber& num)

istream & operator >>(istream &c, BigNumber& num) -->
istream & operator >>(istream &c,const BigNumber& num)

 

پاسخ داده شده فروردین 12, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد فروردین 12, 1393 بوسیله ی maryam
...