القواعد الأساسية والتعابير الاصطلاحية لتحميل المعاملات في C++
مرحباً بالجميع! أنا أتعلم C++ وأحاول فهم تحميل المعاملات. كتبت class بسيط للعمل مع الأعداد المركبة، لكني واجهت الكثير من المشاكل. إليك الكود الخاص بي:
```cpp
class Complex {
public:
double real, imag;
Complex(double r, double i) : real(r), imag(i) {}
// تحميل المعامل +
Complex operator+(Complex other) {
return Complex(real + other.real, imag + other.imag);
}
// تحميل المعامل ==
bool operator==(Complex other) {
return (real == other.real && imag == other.imag);
}
};
int main() {
Complex a(3.0, 4.0);
Complex b(1.0, 2.0);
Complex c = a + b; // يعمل
Complex d = 5.0 + a; // خطأ! لماذا؟
if (c == d) {} // يعمل، لكني سمعت أن هذا غير صحيح
return 0;
}
```
الأسئلة:
1. لماذا لا يتم ترجمة `5.0 + a`، بينما `a + 5.0` يعمل؟
2. هل قمت بتحميل `operator+` بشكل صحيح؟ ما هو "تعابير الإرجاع بالقيمة"؟
3. كيف يتم تحميل `operator==` بشكل صحيح؟