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

⚡ ملخص ذكي

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

  • ➕ ما هو : Operaإعادة تعريف عامل التشغيل مثل + لفئاتك الخاصة.
  • ✍️ بناء الجملة: قم بتعريف دالة باسم operator متبوعة بالرمز، مثل operator+.
  • 🔀 اقتراب: يمكنك تحميل المعاملات الزائدة كدوال أعضاء أو دوال صديقة.
  • 🚫 حدود: بعض المعاملات، مثل :: و ​​. و ?:، لا يمكن إعادة تحميلها.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم أدوات الذكاء الاصطناعي مثل GitHub Copilot بكتابة وظائف التحميل الزائد للمشغلين على الفور.

C++ Operaالحمولة الزائدة

ما هي تفاصيل Operaالتحميل الزائد؟

باستخدام عامل التحميل الزائد in 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;
}

الإخراج:

 Operaالحمولة الزائدة

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

 Operaالحمولة الزائدة

Code التفسير:

  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. سيؤدي هذا إلى استدعاء وظيفة عامل الفراغ -() .
  17. استخدم موقف فئة TestClass لاستدعاء الدالة Display().
  18. يجب أن تقوم الدالة بإرجاع قيمة عند اكتمالها بنجاح.
  19. نهاية نص الدالة الرئيسية ().

مقاربات مختلفة ل Operaالتحميل الزائد في C++

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

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

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

يمكن كل C++ Operaهل تكون محملة بشكل زائد؟

رقم هناك C++ المشغلات التي لا يمكن تحميلها بشكل زائد.

وهي تشمل:

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

أشياء للذكرى

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

قواعد لل Operaالحمولة الزائدة

هنا قواعد ل Operaالتحميل الزائد على تور:

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

كيفية التحميل الزائد Operaتور

مثال 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;
}

الإخراج:

الزائد Operaمثال تور

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

الزائد Operaمثال تور

Code التفسير:

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

الإخراج:

الزائد Operaمثال تور

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

الزائد Operaمثال تور

Code التفسير:

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

الأسئلة الشائعة

Operaتتيح لك خاصية التحميل الزائد لـ tor إعادة تعريف كيفية عمل عوامل التشغيل المضمنة، مثل + أو ==، مع كائنات من فئاتك الخاصة، بحيث تتصرف بشكل طبيعي لأنواع البيانات المخصصة.

عرّف دالة خاصة يكون اسمها هو الكلمة المفتاحية operator متبوعة بالرمز، مثل operator+. تأخذ هذه الدالة المعاملات كمعاملات وتعيد النتيجة.

هناك نهجان رئيسيان: تحميل عامل التشغيل كدالة عضو في الفئة، أو كدالة صديقة يمكنها الوصول إلى الأعضاء الخاصة بالفئة.

يمكن تحميل معظم المعاملات بشكل زائد، ولكن لا يمكن تحميل عدد قليل منها، بما في ذلك معاملات تحديد النطاق (::)، والوصول إلى الأعضاء (.)، ومؤشر الأعضاء (.*)، والمعاملات الثلاثية (?:).

لا يمكنك سوى إعادة تحميل العوامل الموجودة، ويجب أن يكون أحد المعاملات على الأقل من النوع المحدد من قبل المستخدم، ولا يمكنك تغيير أسبقية العامل أو ارتباطه أو عدد معاملاته.

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

نعم. تقوم الأدوات المدعومة بالذكاء الاصطناعي بإنشاء عوامل تشغيل زائدة مثل + و ==، وتتبع القواعد القياسية، وتحدد عوامل التشغيل التي لا يمكن تحميلها بشكل زائد، مما يوفر الوقت ويقلل الأخطاء.

Operaيجعل التحميل الزائد للفئات من السهل استخدامها وقراءتها من خلال السماح للكائنات بالعمل مع عوامل مألوفة، مثل جمع متجهين باستخدام + بدلاً من دالة مسماة.

تلخيص هذه التدوينة بـ: