التحميل الزائد لمعاملات المقارنة
في C++، يسمح لك التحميل الزائد للمعامل بإعادة تعريف سلوك العوامل مثل العوامل الحسابية والمنطقية للأنواع المعرفة من قبل المستخدم. يتم استخدام عوامل الـRelational لمقارنة القيم بين معاملين وتحديد العلاقة بينهما. يسمح لك التحميل الزائد للمشغل لعوامل الـRelational بتحديد سلوكيات المقارنة المخصصة للكائنات من فئاتك الخاصة.
الهدف من إستخدام التحميل الزائد لمعاملات المقارنة:
- المقارنة المخصصة: مع التحميل الزائد للمشغل، يمكنك تحديد سلوكيات المقارنة المخصصة لكائنات فئاتك. يتيح لك ذلك مقارنة الكائنات بناءً على معايير محددة ذات صلة بمجال التطبيق الخاص بك.
- بناء الجملة الطبيعي: تتيح لك عوامل الـrelational المحملة بشكل زائد استخدام البنية المألوفة لعوامل الـrelational (<، ، >=، ==، !=) مع الأنواع المعرفة من قبل المستخدم. يؤدي ذلك إلى تحسين إمكانية قراءة التعليمات البرمجية ويجعل التعليمات البرمجية الخاصة بك أكثر سهولة.
مثال:
#include <iostream> using namespace std; class Relational { int x, y, z; public: Relational() { x = y = z = 0; } Relational(int i, int j, int k) { x = i; y = j; z = k; } int operator==(Relational b) { return(x == b.x && y == b.y && z == b.z); } }; int main() { Relational a(10, 10, 10), b(10, 10, 10); if (a == b) cout << "The two objects are equal\n"; else cout << "The two objects are not equal\n"; return 0; }
يوضح برنامج C++ هذا التحميل الزائد للمعامل لمعامل المساواة (==) في الفئة الـRelational.
- تمثل الفئة Relational كائنات ذات ثلاث attributes صحيحة x وy وz.
- توفر الفئة مُنشئين constructors: مُنشئ افتراضي واحد يقوم بتهيئة جميع الـattributes إلى 0، ومنشئ آخر يسمح بتهيئة الـattributes بالقيم المقدمة.
- عامل operator= = تم تحميل الدالة بشكل زائد داخل الفئة. يأخذ كائن Relational آخر b كمعلمة ويعيد عددًا صحيحًا يشير إلى ما إذا كانت سمات الكائنين متساوية. يتحقق مما إذا كانت سمات x وy وz لكلا الكائنين متساوية ويعيد 1 إذا كانت كذلك، و0 بخلاف ذلك.
- في الدالة main()، يتم إنشاء كائنين (Relational) a وb، وتم تهيئتهما بالقيم (10، 10، 10).
- يتم استخدام عامل المساواة المحمل بشكل زائد == لمقارنة الكائنات a وb. إذا كانت سمات كلا الكائنين متساوية، فستتم طباعة الرسالة "The two objects are equal"؛ وإلا فستتم طباعة الرسالة "The two objects are not equal".