Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في تحميل العوامل

جزء من قسم البرمجة كائنية التوجه في رحلة C++ على Coddy. الدرس 40 من 104.

إعادة تحميل العوامل تتيح لك تحديد كيفية عمل عوامل مثل + أو - أو == عند استخدامها مع أصنافك المخصصة. وبدلًا من استدعاء أساليب مثل a.add(b)، يمكنك كتابة الصيغة الأكثر سهولة وبديهية a + b.

في C++، تُعدّ العوامل في الأساس دوالًا ذات أسماء خاصة. لتحميل عامل بشكل زائد، تُعرِّف دالةً باستخدام الكلمة المفتاحية operator متبوعةً بالرمز:

class Vector2D {
    double x, y;
    
public:
    Vector2D(double x, double y) : x(x), y(y) {}
    
    // تحميل زائد للمشغل +
    Vector2D operator+(const Vector2D& other) const {
        return Vector2D(x + other.x, y + other.y);
    }
};

يمكنك الآن Add متجهين بشكل طبيعي:

Vector2D v1(1.0, 2.0);
Vector2D v2(3.0, 4.0);
Vector2D v3 = v1 + v2;    // يستدعي v1.operator+(v2)

لا يمكن زيادة تحميل جميع المعاملات. لا يمكن زيادة تحميل معامل تحديد النطاق ::، والوصول إلى العضو .، والمعامل الثلاثي ?:، وsizeof. بالإضافة إلى ذلك، لا يمكنك إنشاء معاملات جديدة أو تغيير أسبقية أحد المعاملات - سيُقيَّم * دائمًا قبل +.

يمكن تنفيذ operators كدوال member (كما سبق) أو كدوال non-member. في الدروس القادمة، ستتعلّم متى تستخدم كل نهج وكيفية Overload لفئات محددة من operators.

challenge icon

التحدي

سهل

لنَبْنِ فئة Point تمثّل إحداثيات ثنائية الأبعاد وتدعم جمع نقطتين معًا باستخدام العامل +. هذه هي خطوتك الأولى في تحميل العوامل، مما يجعل فئاتك المخصّصة تعمل مع العوامل المألوفة.

ستنشئ ملفين لتنظيم شفرتك:

  • Point.h: عرّف فئة Point تخزّن إحداثيي x وy (وكلاهما int). يجب أن تحتوي فئتك على:
    • أعضاء private لإحداثيي x وy
    • منشئ يأخذ قيمتي x وy
    • دوال الحصول getX() وgetY() (وكلاهما const)
    • عامل + محمّل زائدًا يجمع نقطتين معًا ويُرجع Point جديدة بالإحداثيات combined

    يجب تنفيذ العامل + على هيئة دالة member تأخذ Point أخرى باستخدام reference ثابتة وتُرجع Point جديدة. علّمها بأنها const لأنها لا تعدّل أيًا من operandين.

  • main.cpp: اقرأ أربعة أعداد صحيحة من input (x1 وy1 وx2 وy2 في أسطر منفصلة) تمثّل نقطتين. أنشئ كائنَي Point، واجمعهما معًا باستخدام العامل +، ثم اعرض results.

    تنسيق Output:

    Point 1: (<x1>, <y1>)
    Point 2: (<x2>, <y2>)
    Sum: (<sum_x>, <sum_y>)

الفكرة الأساسية هنا هي أن p1 + p2 يستدعي فعليًا p1.operator+(p2) في الخلفية. يتيح لك العامل المحمّل زائدًا كتابة شفرة بديهية مثل Point p3 = p1 + p2; بدلًا من شيء مثل Point p3 = p1.add(p2);.

حوّل input strings إلى أعداد صحيحة باستخدام std::stoi(). لا تنسَ header guards في ملف الترويسة.

جرّب بنفسك

#include <iostream>
#include <string>
#include "Point.h"

using namespace std;

int main() {
    // اقرأ المدخلات
    string line1, line2, line3, line4;
    getline(cin, line1);
    getline(cin, line2);
    getline(cin, line3);
    getline(cin, line4);

    int x1 = stoi(line1);
    int y1 = stoi(line2);
    int x2 = stoi(line3);
    int y2 = stoi(line4);

    // TODO: أنشئ كائنين من نوع Point باستخدام قيم المدخلات

    // TODO: أضف النقطتين معًا باستخدام عامل التشغيل +

    // TODO: أخرج النتائج بالتنسيق المطلوب:
    // Point 1: (<x1>, <y1>)
    // Point 2: (<x2>, <y2>)
    // Sum: (<sum_x>, <sum_y>)

    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C++ عبر الإنترنت