معاملات الحساب والمقارنة
أعد تعريف + و- و* و/ و== و< والمعاملات المرتبطة بها وفق أفضل الممارسات.
معاملات الحساب والمقارنة درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
لماذا نحمّل المعاملات؟
يتيح تحميل المعاملات لأنواعك أن تتصرف مثل الأنواع المضمّنة — فالتعبير v1 + v2 أوضح من v1.add(v2). استخدمه مع أنواع القيم مثل المتجهات والأعداد المركبة والمال.
تعريف operator+
يمكنك تحميل + بوصفه عضوًا أو دالة حرّة. وتكون الدوال الحرّة أكثر تماثلًا.
struct Vec2 {
double x, y;
Vec2 operator+(const Vec2& other) const {
return {x + other.x, y + other.y};
}
};صيغة الدالة الحرّة
تمنح الدالة الحرّة كلا المعاملين المكانة نفسها، وهو أمر مفيد عندما يمكن أن يحدث التحويل لأي من الجانبين.
Vec2 operator+(const Vec2& a, const Vec2& b) {
return {a.x + b.x, a.y + b.y};
}معاملات الإسناد المركب
نفّذ += أولًا، ثم ابنِ + فوقه. فهذا هو الأسلوب الاصطلاحي المعتمد.
Vec2& operator+=(const Vec2& other) {
x += other.x;
y += other.y;
return *this;
}
Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
lhs += rhs;
return lhs;
}المعاملات الأحادية
بعض المعاملات أحادية: -x و+x و!x و~x و++x و--x.
Vec2 operator-() const { return {-x, -y}; }الزيادة السابقة أم اللاحقة
لا تتطلب الزيادة السابقة أي وسيط، بينما تتطلب الزيادة اللاحقة وسيطًا وهميًا من النوع int للتمييز بينهما.
Counter& operator++(); // prefix
Counter operator++(int); // postfixمعاملات المقارنة
تعيد معاملات المقارنة قيمة من النوع bool. وتعمل الدوال الحرّة بأفضل صورة من أجل الاتساق.
bool operator==(const Vec2& a, const Vec2& b) {
return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }المعامل أصغر من للترتيب
إذا كان يجب ترتيب نوعك أو استخدامه مفتاحًا في خريطة، فعرّف operator<. وتُشتق معاملات العلاقات الأخرى منه.
المعاملات المتماثلة للأنواع المختلطة
لدعم كلٍّ من 3 + vec وvec + 3، عرّف الصيغتين معًا، أو استخدم دالة حرّة تُجري التحويل.
تجنّب المفاجآت
ينبغي أن تتصرف المعاملات المحمّلة بطريقة بديهية. لا تعِد تعريف + ليعني الطرح. التزم بالجبر الاصطلاحي للمعامل.
المعاملات التي لا يمكنك تحميلها زائدًا
بعض المعاملات غير مسموح بتحميلها زائدًا:
?:— معامل شرطي ثلاثي.— الوصول إلى العضو (لكن يمكن تحميل->زائدًا)::— تحديد النطاقsizeofوalignofوtypeid
اختبار سريع
ما النمط القياسي لتطبيق operator+ على نوع يعرّفه المستخدم؟
مراجعة
يجعل تحميل المعاملات الزائد الأنواع التي يعرّفها المستخدم تبدو كأنها أنواع أصلية. طبّق إسنادًا مركبًا أولًا، ثم العمليات الحسابية العادية. من الأفضل أن تكون معاملات المقارنة دوالًا حرة. التزم بالدلالات المتعارف عليها — فالمفاجأة خطأ.
الأسئلة الشائعة
هل درس «معاملات الحساب والمقارنة» مجاني؟
نعم — نص درس «معاملات الحساب والمقارنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «معاملات الحساب والمقارنة»؟
أعد تعريف + و- و* و/ و== و< والمعاملات المرتبطة بها وفق أفضل الممارسات. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «معاملات الحساب والمقارنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- معاملات الحساب والمقارنة
- معاملات الإدراج والاستخراج من التدفق
- معاملات الفهرسة واستدعاء الدوال
- معامل المقارنة ثلاثية الاتجاه في C++20