المشغل الزائد في ج allows يسمح لك بتحديد سلوك المشغل الجديد للفئات المخصصة وأنواع البيانات. أحد العوامل الأكثر استخداما التي يمكن تحميلها بشكل زائد هو عامل التعيين (=). يتم استخدامه لتعيين قيمة كائن واحد إلى آخر. عند التحميل الزائد لمشغل المهمة ، يمكننا تحديد كيفية حدوث المهمة وإرجاع الكائن.
يجب تعريف عامل التعيين الزائد على أنه طريقة فئة ويكون له التوقيع التالي: كلاسنام والمشغل=(كونست كلاسنام و); هنا ، كلاسنام هو اسم الفئة التي نحن التحميل الزائد المشغل التعيين. النوع الذي تم إرجاعه هو مرجع إلى كائن الفئة التي تتم فيها المهمة.
مثال على الحمل الزائد لمشغل التعيين:
اسم الفئة والمشغل=(كونست كلاسنام وغيرها) {
// نسخ قيم الحقول من أخرى
// إرجاع مرجع إلى الكائن الحالي
}
وبالتالي ، يقوم عامل التخصيص الزائد بإرجاع مرجع إلى كائن الفئة التي تم تحميلها بشكل زائد. هذا يسمح لك باستخدام عامل التعيين في سلاسل، على سبيل المثال: أوبج1 = أوبج2 = أوبج3; بالإضافة إلى ذلك ، يمكن أن يكون إرجاع مرجع إلى كائن فئة مفيدا للعمل مع الوسائط حسب المرجع ولدعم منشئي النسخ.
- نوع الإرجاع للمشغل الزائد
- تعدد الأشكال للمشغلين المثقلين
- تحديد نوع قيمة الإرجاع
- التفاعل مع الأشياء الأخرى
- مزايا وقيود استخدام المشغل الزائد
- سؤال وجواب
- ما هو نوع الكائن الذي يعود إليه المشغل الزائد?
- هل يعتمد نوع الإرجاع للمشغل الزائد على نوع معاملاته?
- هل من الممكن إرجاع أنواع مختلفة من الكائنات عند التحميل الزائد للمشغل?
- ما هو نوع الكائن الذي سيعود إليه عامل الإضافة الزائد لكائنات فئة السلسلة?
- يمكن للمشغل الزائد إرجاع مؤشر إلى كائن?
- هل من الممكن إرجاع إشارة إلى كائن عندما يكون المشغل مثقلا?
نوع الإرجاع للمشغل الزائد
يسمح لك التحميل الزائد للمشغل بتحديد سلوك المشغلين لأنواع البيانات المعرفة من قبل المستخدم. عندما نفرط في تحميل المشغل ، يمكننا تحديد نوع البيانات الذي سيتم إرجاعه عند استخدامه.
يمكن أن يكون نوع الإرجاع للمشغل الزائد تعسفيا ويعتمد على المهمة المراد حلها. عادة ، يجب أن يكون نوع القيمة التي تم إرجاعها منطقيا (على سبيل المثال ، منطقي) ، رقمي (على سبيل المثال ، كثافة العمليات ، تعويم) ، أو نوع بيانات منطقي في سياق المشغل.
على سبيل المثال ، إذا كنا الزائد المشغل المقارنة (==أو!= ) ، يمكن أن يكون نوع الإرجاع منطقيا ، لأن عامل المقارنة يجب أن يعطي قيمة منطقية (صح أو خطأ).
إذا كنا الزائد زائد ( + ) عامل لسلسلة سلسلة ، قد يكون نوع العودة ستد::سلسلة ، لأن نتيجة سلسلة سلسلة ستكون سلسلة.
في بعض الأحيان يمكن أن يكون نوع الإرجاع مرجعا لكائن لتجنب النسخ غير الضروري للبيانات أو لدعم سلسلة من العمليات. على سبيل المثال ، يمكن لمشغل التعيين الزائد (=) لفئة مخصصة إرجاع مرجع إلى كائن حتى نتمكن من استخدام تعبيرات مثل أوبج1 = أوبج2 = أوبج3.
يتم تعريف نوع الإرجاع للمشغل الزائد في إعلانه. يتم تحديده قبل اسم المشغل وبعد الكلمة الأساسية للمشغل. على سبيل المثال:
عامل منطقي= = (كونست ميكلاس و لس ، كونست ميكلاس و رس);
المشغل الدولي+(الباحث أ ، الباحث ب);
ستد:: سلسلة المشغل+(كونست ستد:: سلسلة و ستر 1 ، كونست ستد:: سلسلة و ستر 2);
ميكلاس والمشغل=(كونست ميكلاس و رس);
من المهم اختيار نوع الإرجاع الصحيح لكل مشغل مثقل من أجل ضمان سلوك المشغل الصحيح والمفهوم في سياق الاستخدام.
تعدد الأشكال للمشغلين المثقلين
يسمح التحميل الزائد للمشغل في ج allows للمبرمج بتحديد سلوك جديد للمشغلين القياسيين مثل +, -, \*, /, ==, != وغيرها . نظرا للحمل الزائد للمشغل ، من الملائم جدا العمل مع أنواع البيانات المعرفة من قبل المستخدم واستخدامها بنفس طريقة الأنواع المضمنة.
ومع ذلك ، إلى جانب التحميل الزائد للمشغل ، ينشأ مفهوم مهم آخر — تعدد الأشكال. تعدد الأشكال يعني أنه يمكن استخدام كائنات من أنواع مختلفة في نفس السياق واستدعاء نفس العمليات ، بما في ذلك العوامل المحملة بشكل زائد.
عندما يتم استدعاء عامل تشغيل زائد على كائنات من أنواع مختلفة ، يحدد المترجم تلقائيا إصدار المشغل الذي يجب استخدامه. على سبيل المثال ، إذا كان لدينا الفئتان أ و ب ، وكلا الفئتين بهما عامل تشغيل + مثقل ، فعند استدعاء المشغل على كائنات من النوع أ و ب ، سيحدد المترجم بشكل مستقل خيار المشغل المطلوب.
من المهم ملاحظة أن المشغل الزائد يقوم دائما بإرجاع كائن جديد. هذا يعني أنه عند استخدام تعدد الأشكال ، عندما يتم استدعاء عامل تشغيل على كائن يمكن أن يكون من أنواع مختلفة ، فإن نتيجة تنفيذ المشغل ستكون كائنا جديدا — كائنا من نفس نوع المعاملات.
وبالتالي ، فإن استخدام المشغلين المثقلين مع تعدد الأشكال يجعل من الممكن العمل بفعالية مع أنواع مختلفة من البيانات وتبسيط استخدامها في البرنامج.
تحديد نوع قيمة الإرجاع
عند التحميل الزائد للمشغلين في ج++ ، يكون لدى المطور الفرصة لتحديد نوع قيمة الإرجاع وفقا للمتطلبات المحددة. يمكن أن يكون النوع الذي تم إرجاعه أي نوع بيانات ، بما في ذلك الأنواع المضمنة (مثل كثافة العمليات أو المزدوجة) أو الأنواع المعرفة من قبل المستخدم (مثل الفئات).
يعتمد نوع قيمة الإرجاع على العملية المحددة والغرض منها. على سبيل المثال ، عند التحميل الزائد لمشغل الإضافة لكائنين من فئة ما ، قد يكون نوع القيمة التي تم إرجاعها كائنا من نفس الفئة أو نوع بيانات آخر يمكن من خلاله إجراء عملية إضافة.
لتحديد نوع قيمة الإرجاع عند التحميل الزائد على عامل التشغيل ، يجب تحديده في إعلان المشغل باستخدام بناء الجملة:
نوع المشغل المشغل (المعلمات)
على سبيل المثال ، إذا أردنا زيادة التحميل على عامل الإضافة لفئة النقطة بحيث يتم إرجاع كائن النقطة ، فقد يبدو الإعلان كما يلي:
مشغل نقطة+(نقطة كونست وغيرها) { ... }
في هذا المثال ، النوع الذي تم إرجاعه هو فئة النقطة.
من الممكن أيضا استخدام المؤشرات أو المراجع كنوع إرجاع. على سبيل المثال:
كثافة العمليات * المشغل+(كونست كثافة العمليات والقيمة) { ... }
في هذا المثال ، نوع الإرجاع هو مؤشر إلى كثافة العمليات.
يمكن استخدام القيمة التي يتم إرجاعها من عامل تشغيل زائد في رمز البرنامج الإضافي ، بالإضافة إلى تعيينها لمتغير أو تمريرها كوسيطة إلى دالة.
يعد تحديد نوع الإرجاع بشكل صحيح في العبارات المحملة بشكل زائد جانبا مهما من الاستثناءات في ج++. يمكن أن يؤدي تحديد النوع غير الصحيح إلى نتائج وأخطاء غير متوقعة في البرنامج.
التفاعل مع الأشياء الأخرى
يقوم المشغل الزائد بإرجاع كائن من النوع المطلوب ، اعتمادا على التنفيذ. يمكنه العودة:
- يتم استخدام كائن من نفس النوع عند استخدام عامل تشغيل زائد لتنفيذ عملية بين كائنات من نفس الفئة. على سبيل المثال ، إذا كان عامل الإضافة لفئة المتجه مثقلا بشكل زائد ، فستكون نتيجة إضافة متجهين كائنا جديدا من متجه النوع.
- يتم استخدام كائن من نوع مختلف عند استخدام عامل تشغيل زائد لتنفيذ عملية بين كائنات من فئات مختلفة. على سبيل المثال ، إذا تم تحميل عامل الإضافة لفئة المتجه وفئة النقطة بشكل زائد ، فستكون نتيجة إضافة المتجه والنقطة كائنا جديدا لنقطة النوع.
- يتم استخدام كائن الفئة الأساسية عند استخدام عامل تشغيل زائد في سياق متعدد الأشكال ، حيث يتم استدعاء دالة على كائن من نوع الفئة الأساسية ، ويتم إرجاع النتيجة ككائن من هذه الفئة الأساسية. على سبيل المثال ، إذا تم استخدام عامل إضافة زائد لفئة الشكل ، واستدعت الكائنات وظيفة هذا المشغل على كائنات فئة الدائرة وفئة المستطيل ، فستكون النتيجة كائن شكل جديد.
يمكن أن يكون لكل تنفيذ لمشغل زائد التحميل تفاصيله الخاصة من نوع الإرجاع وفقا لمتطلبات البرنامج والمهمة التي يحلها.
مزايا وقيود استخدام المشغل الزائد
واحدة من الآليات المهمة للغة البرمجة التي تسمح لك بتحديد سلوكك الخاص للعمليات مع كائنات من نوع معين هي التحميل الزائد للمشغل. يسمح لك التحميل الزائد للمشغل بتحديد كيفية تصرف الكائنات عند إجراء عمليات مختلفة مثل الجمع والطرح والمقارنة وما إلى ذلك.
مزايا استخدام المشغل الزائد:
- زيادة فهم الكود: يسمح لك المشغلون المثقلون بالعمل مع الكائنات كما لو كانت أنواع بيانات مدمجة. هذا يزيد بشكل كبير من قابلية قراءة الكود وفهمه ، حيث يمكن للمبرمج استخدام عوامل تشغيل مألوفة للعمل مع كائنات المستخدم.
- تحسين راحة العمل مع أنواع البيانات: يسمح لك المشغلون المثقلون بإنشاء واجهات سهلة الاستخدام وبديهية لأنواع البيانات. على سبيل المثال ، يسمح لك التحميل الزائد لمشغل الإضافة بإضافة كائنات من نوع النقطة أو المتجه ، والتي يمكن أن تكون أكثر ملاءمة من استدعاء طريقة أو وظيفة خاصة.
- تبسيط وتوحيد المدونة: من خلال التحميل الزائد للمشغلين ، يمكنك استخدام بناء جملة واحد للعمل مع أنواع بيانات مختلفة. على سبيل المثال ، يسمح لك التحميل الزائد لمشغل المقارنة بمقارنة الكائنات من أي نوع دون الحاجة إلى استدعاء طريقة خاصة.
ومع ذلك ، فإن استخدام المشغلين المثقلين لديه أيضا بعض القيود:
- فقدان قابلية قراءة الكود: إذا تم استخدام التحميل الزائد للمشغل بشكل مفرط أو أخرق ، فقد يؤدي ذلك إلى تدهور قابلية قراءة الكود وفهمه. قد يتصرف المشغلون المثقلون بشكل غير متوقع للمبرمجين الآخرين الذين اعتادوا على السلوك القياسي للمشغلين.
- قدرات التحميل الزائد المحدودة: لا يمكن تحميل جميع المشغلين بشكل زائد ، ولا يمكن تعريف جميع أنواع العمليات لأنواع البيانات المخصصة. على سبيل المثال ، لا يمكن تحميل عوامل تشغيل اللغة مثل عامل التشغيل الشرطي إذا كان آخر أو أثناء الحلقات.
- الانتهاك المحتمل لمبدأ التغليف: يمكن للمشغلين المثقلين بشكل غير صحيح أو غير كاف أن ينتهكوا مبدأ التغليف من خلال السماح بالوصول إلى أعضاء الفئة الخاصة أو المحمية. هذا يمكن أن يؤدي إلى أخطاء وسلوكيات غير متوقعة.
بشكل عام ، يعد التحميل الزائد للمشغل أداة قوية لتحسين قابلية استخدام الشفرة وقراءتها ، ولكنه يتطلب استخداما دقيقا والالتزام بمبادئ لغة البرمجة.
سؤال وجواب
ما هو نوع الكائن الذي يعود إليه المشغل الزائد?
يمكن للمشغل الزائد إعادة كائن من أي نوع ، اعتمادا على تنفيذه. على سبيل المثال ، لزيادة التحميل على عامل الإضافة ، يمكن إرجاع كائن من نفس نوع المعاملات أو كائن من نوع مختلف يمثل نتيجة العملية.
هل يعتمد نوع الإرجاع للمشغل الزائد على نوع معاملاته?
نعم ، قد يعتمد نوع الإرجاع للمشغل الزائد على نوع معاملاته. على سبيل المثال ، عند التحميل الزائد لمشغل الإضافة لكائنات فئة الكسر ، قد تكون النتيجة كائن كسر جديد يمثل مجموع كسرين.
هل من الممكن إرجاع أنواع مختلفة من الكائنات عند التحميل الزائد للمشغل?
نعم ، عند التحميل الزائد للمشغل ، يمكنك إرجاع كائنات من أنواع مختلفة. يمكن أن يكون النوع الذي تم إرجاعه أي نوع بيانات ، بما في ذلك الأنواع المضمنة والفئات المخصصة والمؤشرات للكائنات.
ما هو نوع الكائن الذي سيعود إليه عامل الإضافة الزائد لكائنات فئة السلسلة?
يمكن أن يكون نوع الإرجاع لمشغل الإضافة الزائد لكائنات فئة السلسلة كائنا من نفس سلسلة الفئة. يمكن لمثل هذا المشغل إرجاع كائن سلسلة جديد يمثل مجموع سلسلتين.
يمكن للمشغل الزائد إرجاع مؤشر إلى كائن?
نعم ، يمكن للمشغل الزائد إعادة مؤشر إلى كائن. على سبيل المثال ، عند التحميل الزائد لمشغل الفهرسة لفئة الصفيف ، يمكنك إرجاع مؤشر إلى عنصر صفيف في فهرس معين.
هل من الممكن إرجاع إشارة إلى كائن عندما يكون المشغل مثقلا?
نعم ، يمكن للمشغل الزائد إعادة مرجع إلى كائن. على سبيل المثال ، عند التحميل الزائد لمشغل التعيين لفئة ، يمكنك إرجاع مرجع إلى الكائن لتمكين سلسلة من عمليات التعيين.