Tamam, bir kitap üzerinde çalışıyorum ve C++ operatör aşırı yüklemesini öğrenmeye çalışıyorum. Kurucu için tek bir int (başlangıçta 0'a ayarlı) alan bir BigInt sınıfı oluşturdum. I + = yöntemi aşırı ve aşağıdaki kodda sadece iyi çalışır:C++ 'da Overloading Operator +
BigInt x = BigInt(2);
x += x;
x.print(cout);
kod çıktısı 4. Yani, o zaman aşağıdaki kodu küresel operatörü aşırı + kullanarak üzerinde çalışıyordu:
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
Bu aynı zamanda şu kodu çalışıyor: aşağıdaki kodu çalıştırmak çalıştığınızda bu, ancak 6. yazdırır
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
, sadece işe yaramaz. Kitap çok iyi açıklamıyor ve sadece çalışması gerektiğini ima ediyor.
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
Bu z 1 neden online ve stackoverflow googled 6. olmalı ama tam olarak böyle bir sorunum olduğunu kimseye bulamayınca emin değilim 1. yazdırır. bazıları yakındı, ama cevaplar uymadı. Herhangi bir yardım çok takdir edilir!
Bunun senin probleminle ilgili olduğunu sanmıyorum, fakat verimlilik için (ve ayrıca C++ 'da idiomatik olduğu için)' operatör + 'argümanları, const değerine göre değil, const değerine göre alınmalıdır. 'BigInt operatör + (const BigInt & lhs, const BigInt & rhs)' –
Bir şey merak ediyorum: Neden sadece '= 1' yerine' = BigInt (1) 'yazıyorsunuz? Tam sınıf tanımınızı gösterdiyseniz, size daha iyi yardımcı olabiliriz diye düşünüyorum :) –
Tyler ile aynı fikirdeyim. Ayrıca, 'BigInt x (1)' olarak başlatılması daha idiyomiktir, 'Yaptığınız yol geçici bir durum oluşturur ve daha sonra kopya ctor'unu çağırır (bu muhtemelen en iyi duruma getirilmiş olsa da). – Dan