التحميل الزائد لمشغل C++ مع أمثلة

ما هو الحمولة الزائدة للمشغل؟

باستخدام عامل التحميل الزائد في C++، يمكنك تحديد أكثر من معنى لمشغل في نطاق واحد. الغرض من التحميل الزائد للمشغل هو توفير معنى خاص للمشغل لنوع البيانات المحدد من قبل المستخدم.

بمساعدة التحميل الزائد للمشغل، يمكنك إعادة تعريف غالبية مشغلي C++. يمكنك أيضًا استخدام التحميل الزائد للمشغل لإجراء عمليات مختلفة باستخدام مشغل واحد.

بناء الجملة

لزيادة التحميل على مشغل C++، يجب عليك تحديد وظيفة خاصة داخل الفصل على النحو التالي:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

وفيما يلي شرح لبناء الجملة أعلاه:

  • return_type هو نوع الإرجاع للوظيفة.
  • بعد ذلك، ذكرت الكلمة الأساسية للمشغل.
  • يشير الرمز إلى رمز المشغل المراد تحميله بشكل زائد. على سبيل المثال، +، -، <، ++.
  • يمكن تمرير الوسيطة (الوسائط) إلى وظيفة المشغل بنفس طريقة تمرير الوظائف.

مثال 1

#include <iostream>
using namespace std;
class TestClass {
private:
	int count;
public:
	TestClass() : count(5) {}
	void operator --() {
		count = count - 3;
	}
	void Display() { 

		cout << "Count: " << count; }
};

int main() {
	TestClass tc;
	--tc;
	tc.Display();
	return 0;
}

الإخراج:

زيادة الحمولة على المشغل

فيما يلي لقطة شاشة للكود:

زيادة الحمولة على المشغل

شرح الكود:

  1. تضمين ملف رأس iostream في الكود الخاص بنا لاستخدام وظائفه.
  2. قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاتها دون استدعائها.
  3. قم بإنشاء فئة تسمى TestClass.
  4. استخدم معدّل الوصول الخاص، الذي يحدد عضو الفصل على أنه يمكن الوصول إليه بشكل خاص.
  5. إنشاء عدد متغير عدد صحيح. سيكون هذا المتغير متاحًا بشكل خاص.
  6. استخدم معدّل الوصول العام، الذي يضع علامة على عضو الفصل على أنه يمكن الوصول إليه بشكل خاص.
  7. استخدم مُنشئ الفئة لتهيئة العداد المتغير إلى 5.
  8. الزائد معنى — المشغل.
  9. سوف يقوم عامل التشغيل بتقليل قيمة المتغير x بمقدار 1.
  10. نهاية قسم التحميل الزائد للمشغل. تم إعطاء المشغل اسمًا جديدًا.
  11. تحديد وظيفة تسمى وظيفة العرض ().
  12. قم بطباعة قيمة عدد المتغيرات إلى جانب النص الآخر على وحدة التحكم عند استدعاء الدالة Display(). يمثل } نهاية نص وظيفة Display().
  13. نهاية الجسم الصفي.
  14. استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج ضمن هذه الوظيفة.
  15. قم بإنشاء مثيل للفئة TestClass وأعطه الاسم tc.
  16. سيؤدي هذا إلى استدعاء الدالة void –() .
  17. استخدم موقف فئة TestClass لاستدعاء الدالة Display().
  18. يجب أن تقوم الدالة بإرجاع قيمة عند اكتمالها بنجاح.
  19. نهاية نص الدالة الرئيسية ().

طرق مختلفة للتحميل الزائد للمشغل في C++

يمكنك إجراء التحميل الزائد للمشغل من خلال تنفيذ أي من الخطوات التاليةwing أنواع الوظائف:

  1. وظيفة العضو
  2. وظيفة غير الأعضاء
  3. وظيفة صديق
  • قد تكون وظيفة التحميل الزائد للمشغل وظيفة عضو عندما يكون المعامل الأيسر كائنًا من الفئة.
  • عندما يكون المعامل الأيسر مختلفًا، يجب أن تكون وظيفة التحميل الزائد للمشغل وظيفة غير عضو.

يمكنك جعل وظيفة التحميل الزائد للمشغل وظيفة صديق إذا كانت بحاجة إلى الوصول إلى أعضاء الفئة الخاصة والمحمية.

هل يمكن تحميل جميع مشغلي C++ بشكل زائد؟

لا، هناك عوامل تشغيل C++ لا يمكن تحميلها بشكل زائد.

وهي تشمل:

  • :: - مشغل دقة النطاق
  • ؟: - المشغل الثلاثي.
  • . - منتخب الأعضاء
  • حجم المشغل
  • * - محدد مؤشر العضو

أشياء للذكرى

  1. مع التحميل الزائد للمشغل، يمكنك إعادة تعريف الطريقة التي يعمل بها المشغل فقط للأنواع المحددة من قبل المستخدم (الكائنات والهياكل). لا يمكنك استخدامه للأنواع المضمنة (float، char، int، وما إلى ذلك).
  2. يتم تحميل عوامل التشغيل = و&C++ بشكل زائد بشكل افتراضي. على سبيل المثال، يمكنك نسخ الكائنات من نفس الفئة مباشرةً باستخدام عامل التشغيل =.
  3. لا تغير أسبقية عامل التشغيل ترابطًا وأسبقية عوامل التشغيل. ومع ذلك، يمكنك تغيير ترتيب التقييم باستخدام الأقواس.
  4. هناك أربعة عوامل تشغيل لا يمكنك تحميلها بشكل زائد في لغة C++. وهي تشمل عامل تحليل النطاق (::)، وعامل اختيار العضو (.)، واختيار العضو من خلال مؤشر لمشغل الوظيفة (.*)، والمشغل الثلاثي (؟:).

قواعد التحميل الزائد للمشغل

فيما يلي قواعد التحميل الزائد للمشغل:

  • لكي يعمل، يجب أن يكون معامل واحد على الأقل كائن فئة معرفة من قبل المستخدم.
  • يمكنك فقط زيادة التحميل على المشغلين الحاليين. لا يمكنك زيادة التحميل على المشغلين الجدد.
  • لا يمكن تحميل بعض المشغلين بشكل زائد باستخدام وظيفة الصديق. ومع ذلك، يمكن تحميل هؤلاء المشغلين بشكل زائد باستخدام وظيفة العضو.

كيفية التحميل الزائد على المشغل

مثال 1

#include <iostream>   
using namespace std;
class OperatorOverload {
private:
	int x;

public:
	OperatorOverload() : x(10) {}
	void operator ++() {
		x = x + 2;
	}
	void Print() {
		cout << "The Count is: " << x;
		}
};
int main() {
	OperatorOverload ov;
	++ov;   
	ov.Print();
	return 0;
}

الإخراج:

مثال مشغل الزائد

فيما يلي لقطة شاشة للكود:

مثال مشغل الزائد

شرح الكود:

  1. تضمين ملف رأس iostream في الكود الخاص بنا لاستخدام وظائفه.
  2. قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاتها دون استدعائها.
  3. قم بإنشاء فئة باسم OperatorOverload.
  4. استخدم معدّل الوصول الخاص، الذي يحدد عضو الفصل على أنه يمكن الوصول إليه بشكل خاص.
  5. إنشاء متغير عدد صحيح x. سيكون هذا المتغير متاحًا بشكل خاص.
  6. استخدم معدّل الوصول العام، الذي يضع علامة على عضو الفصل على أنه يمكن الوصول إليه بشكل خاص.
  7. استخدم مُنشئ الفئة لتهيئة المتغير x إلى 10.
  8. قم بتحميل معنى عامل التشغيل ++.
  9. سيقوم المشغل بزيادة قيمة المتغير x بـ 2.
  10. نهاية قسم التحميل الزائد للمشغل. تم إعطاء المشغل اسمًا جديدًا.
  11. استدعاء الدالة Print().
  12. قم بطباعة قيمة المتغير x بجانب نص آخر على وحدة التحكم عند استدعاء الدالة Print().
  13. نهاية نص الدالة Print().
  14. نهاية الجسم الصفي.
  15. استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج ضمن هذه الوظيفة.
  16. قم بإنشاء مثيل لفئة OperatorOverload المسمى ov.
  17. سيؤدي هذا إلى استدعاء وظيفة عامل التشغيل void ++().
  18. استخدم موقف فئة OperatorOverload لاستدعاء الدالة Print().
  19. يجب أن تقوم الدالة بإرجاع قيمة عند اكتمالها بنجاح.
  20. نهاية نص الدالة الرئيسية ().

مثال 2

#include<iostream> 
using namespace std;

class TestClass {
private:
	int real, over;
public:
	TestClass(int rl = 0, int ov = 0) {
		real = rl;
		over = ov;
	}

	TestClass operator + (TestClass const &obj) {
		TestClass result;
		result.real = real + obj.real;
		result.over = over + obj.over;
		return result;
	}
	void print() {
		cout << real << " + i" << over << endl;
	}
};
int main()
{
	TestClass c1(9, 5), c2(4, 3);
	TestClass c3 = c1 + c2;
	c3.print();
}

الإخراج:

مثال مشغل الزائد

فيما يلي لقطة شاشة للكود:

مثال مشغل الزائد

شرح الكود:

  1. تضمين ملف رأس iostream في برنامجنا من أجل استخدام وظائفه.
  2. قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاته دون استدعائها.
  3. قم بإنشاء فئة تسمى TestClass. يمثل { بداية نص الفصل.
  4. استخدم معدل الوصول الخاص لوضع علامة على المتغيرات على أنها خاصة، مما يعني أنه لا يمكن الوصول إليها إلا من داخل الفصل.
  5. حدد متغيرين صحيحين، حقيقي وأكثر.
  6. استخدم معدّل الوصول العام لتمييز المُنشئ على أنه عام، مما يعني أنه سيكون من الممكن الوصول إليه حتى خارج الفصل.
  7. إنشاء منشئ الفصل وتهيئة المتغيرات.
  8. تهيئة قيمة المتغير الحقيقي.
  9. تهيئة قيمة المتغير انتهى.
  10. نهاية الجسم المنشئ.
  11. تجاوز معنى عامل التشغيل +.
  12. قم بإنشاء نتيجة نوع البيانات من النوع TestClass.
  13. استخدم عامل التشغيل + مع complex أعداد. سيضيف هذا السطر الجزء الحقيقي من الرقم إلى الجزء الحقيقي من رقم آخر.
  14. استخدم عامل التشغيل + مع complex أعداد. سيضيف هذا السطر الجزء التخيلي من رقم إلى الجزء التخيلي من رقم آخر.
  15. سيقوم البرنامج بإرجاع قيمة النتيجة المتغيرة عند التنفيذ الناجح.
  16. نهاية تعريف المعنى الجديد للمشغل + أي التحميل الزائد.
  17. استدعاء طريقة الطباعة ().
  18. طباعة كوم الجديدplex الرقم بعد الإضافة على وحدة التحكم.
  19. نهاية نص الدالة print().
  20. نهاية نص فئة TestClass.
  21. استدعاء الدالة الرئيسية ().
  22. تمرير قيم كل من الحقيقي وcomplex الأجزاء المراد إضافتها. سيتم إضافة الجزء الأول من c1 إلى الجزء الأول من c2، أي 9+4. سيتم إضافة الجزء الثاني من c1 إلى الجزء الثاني من c، أي 5+3.
  23. إجراء عملية باستخدام عامل التحميل الزائد + وتخزين النتيجة في المتغير c3.
  24. طباعة قيمة المتغير c3 على وحدة التحكم.
  25. نهاية نص الدالة main().

نبذة عامة

  • يمكنك تحديد أكثر من معنى لـ a عامل C ++ في نطاق واحد.
  • وهذا ما يسمى التحميل الزائد للمشغل.
  • يوفر التحميل الزائد للمشغل معنى خاصًا للمشغل لنوع البيانات المحدد من قبل المستخدم.
  • يمكنك إعادة تعريف غالبية مشغلي C++ من خلال التحميل الزائد للمشغل.
  • لا يمكن تحميل جميع مشغلي C++ بشكل زائد.
  • لكي يتم تحميل المشغل بشكل زائد، يجب أن يكون أحد المعاملات على الأقل كائنًا محددًا من قبل المستخدم.
  • يمكن تحميل المشغلين الحاليين فقط بشكل زائد. لا يمكنك زيادة التحميل على المشغلين الجدد.