Dobrze, pracuję nad książką i próbuję nauczyć się przeciążać operatora C++. Stworzyłem klasę BigInt, która pobiera pojedynczy int (początkowo ustawiony na 0) dla konstruktora. I przeciążone + = metoda i to działa dobrze w poniższym kodzie:Przeciążanie operatora + w C++
BigInt x = BigInt(2);
x += x;
x.print(cout);
kod będzie wyjście 4. Tak, wtedy byłem w pracy na przeciążenia operatora globalnego + stosując następujący kod:
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
działa to też w porządku dla następującego kodu:
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
ten wypisuje 6. Jednakże, gdy próbuję wykonać następujący kod, to po prostu nie działa. Książka nie wyjaśnia się zbyt dobrze i sugeruje, że powinna po prostu działać.
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
ten wypisuje 1. Nie jestem pewien, dlaczego oo jest 1 gdy powinno być 6. google online i na stackoverflow, ale nie mogłem znaleźć nikogo, który był problem dokładnie tak. niektóre były blisko, ale odpowiedzi po prostu nie pasowały. Każda pomoc jest doceniana!
Nie sądzę, że jest to związane z twoim problemem, ale ze względu na wydajność (a także dlatego, że jest idiomatyczne w C++) argumenty 'operator +' powinny być brane przez odniesienie do const, a nie przez wartość, np. 'Operator BigInt + (const BigInt & Lhs, const BigInt & rhs)' –
Jedną z rzeczy, nad którą zastanawiam się: Dlaczego piszesz '= BigInt (1)' zamiast tylko '= 1'? Myślę, że gdybyś pokazał nam swoją pełną definicję klasy, możemy Ci pomóc lepiej :) –
Zgadzam się z Tylerem. Również bardziej idiomatyczny do zainicjowania jako 'BigInt x (1);' Sposób, w jaki to robisz tworzy tymczasowy, a następnie wywołuje ctor (choć prawdopodobnie zostałby zoptymalizowany). – Dan