زيادة التحميل على الوظائف في C ++: كل ما تحتاج إلى معرفته

ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن التحميل الزائد للوظائف في C ++ مع الكثير من الأمثلة لفهمها.

C ++ هي إحدى لغات البرمجة التي تتسم بالمرونة الشديدة وهي تغطي أيضًا العديد من ميزات البرمجة الموجهة للكائنات. التحميل الزائد هو ميزة أخرى للغة البرمجة هذه.سيتم تغطية المؤشرات التالية في مقالة 'التحميل الزائد للوظائف في C ++' -

C ++ الزائد

عندما نقوم بإنشاء عضوين أو أكثر من فئة تحمل نفس الاسم ولكن تختلف في عدد أو نوع المعلمات ، يُعرف ذلك باسم C ++ overloading. في C ++ ، يمكننا زيادة التحميل:





  • طرق،
  • المنشئين و
  • الخصائص المفهرسة

أنواع التحميل الزائد في C ++

types-of-overloading-in-c++

ما هي وظيفة التحميل الزائد في C ++؟

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



تتمثل إحدى المزايا الرئيسية للتحميل الزائد للوظائف في أنه يزيد من إمكانية قراءة البرنامج لأننا لا نحتاج إلى استخدام أسماء مختلفة لنفس الإجراء مرارًا وتكرارًا.

عن طريق تغيير عدد الحجج

بهذه الطريقة من التحميل الزائد للوظيفة ، نحدد وظيفتين بنفس الأسماء ولكن بعدد مختلف من المعلمات من نفس النوع. على سبيل المثال ، في البرنامج المذكور أدناه ، قمنا بعمل وظيفتين add () لإرجاع مجموع اثنين وثلاثة أعداد صحيحة.

// تعريف الوظيفة الأولى int add (int a، int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

هنا يُقال أن وظيفة add () محملة بشكل زائد ، حيث تحتوي على تعريفين ، أحدهما يقبل وسيطين والآخر يقبل ثلاث حجج. أي دالة add () سيتم استدعاؤها ، تعتمد على عدد الوسائط.



int main () {add (10، 20) // add () مع معلمتين ستسمى add (10، 20، 30) // sum () مع 3 معلمة ستسمى}
#include باستخدام مساحة الاسم std int add (int a، int b) {cout<< a+b <

كيفية ايقاف البرنامج في جافا

في المثال أعلاه ، قمنا بإفراط في تحميل وظيفة add () عن طريق تغيير عدد الوسائط. أولاً ، نحدد دالة add () بمعاملتين ، ثم نفرط في تحميلها عن طريق تحديد الوظيفة add () مرة أخرى ولكن هذه المرة بثلاث معاملات.

من خلال وجود أنواع مختلفة من الحجج

في هذه الطريقة ، نحدد وظيفتين أو أكثر بنفس الاسم ونفس عدد المعلمات ، لكن نوع البيانات المستخدم لهذه المعلمات مختلف. على سبيل المثال في هذا البرنامج ، لدينا ثلاث وظائف add () ، الأولى تحصل على وسيطين صحيحين ، والثانية تحصل على وسيطتين عائمتين والثالثة على وسيطتين مزدوجتين.

# تضمين باستخدام مساحة الاسم std int add (int x، int y) // التعريف الأول {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

في المثال أعلاه ، نحدد وظيفة add () ثلاث مرات. أولاً باستخدام الأعداد الصحيحة كمعلمات ، والثاني باستخدام float كمعلمات والثالث باستخدام double كمعامل.
وهكذا نتجاوز وظيفة add () مرتين.

مزايا وظيفة التحميل الزائد في C ++

  • نستخدم التحميل الزائد للوظائف لتوفير مساحة الذاكرة والاتساق وسهولة قراءة برنامجنا.

  • باستخدام مفهوم التحميل الزائد لوظيفة الاستخدام ، يمكننا تطوير أكثر من وظيفة واحدة بنفس الاسم

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

  • يعمل التحميل الزائد على تسريع تنفيذ البرنامج.

    أنواع المجموعات في جافا
  • يتم استخدام التحميل الزائد للوظيفة لإعادة استخدام الكود وأيضًا لحفظ الذاكرة.

  • يساعد التطبيق على تحميل طريقة الفصل بناءً على نوع المعلمة.

  • صيانة الكود سهلة.

عيوب وظيفة التحميل الزائد في C ++

  • لا يمكن تحميل إعلانات الوظائف التي تختلف فقط من خلال نوع الإرجاع الخاص بها مع عملية التحميل الزائد للوظيفة.
  • لا يمكن زيادة تحميل إعلانات وظائف الأعضاء التي لها نفس المعلمات أو نفس أنواع الاسم إذا تم الإعلان عن أي منها كدالة عضو ثابتة.
  • الفئة XYZ {func () void void func () // error}

وظيفة التحميل الزائد والغموض

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

  • اكتب التحويل.
  • تعمل مع الوسائط الافتراضية.
  • وظيفة مع إشارة مرور

نوع التحويل:

# تضمين باستخدام دالة مساحة الاسم std void (float) دالة void (int) void (float x) {std :: cout<< 'Value of x is : ' <

يلقي المثال أعلاه خطأ - 'استدعاء' وظيفة (مضاعفة) 'المحملة بشكل زائد غامض'. ستستدعي الوظيفة (3.4) الوظيفة الأولى. تستدعي الوظيفة (34) الوظيفة الثانية وفقًا لتوقعاتنا. لكن هذا ليس ما يحدث لأنه في C ++ يتم التعامل مع جميع ثوابت الفاصلة العائمة على أنها مزدوجة وليست عائمة. إذا استبدلنا المتغير float بمتغير مزدوج ، فسيعمل البرنامج بشكل جيد. لذلك نسمي هذا خطأ تحويل نوع من تعويم إلى مضاعف.

الوظيفة ذات الوسيطات الافتراضية:

# تضمين استخدام دالة مساحة الاسم (int) void function (int ، int) void function (int x) {std :: cout<< 'Value of x is : ' <

يعطي المثال أعلاه خطأ مفاده أن 'استدعاء' fun (int) 'المحمّل فوق طاقته غامض' ، وذلك لأنه يمكن استدعاء الوظيفة (int y، int z = 12) بطريقتين:

  1. من خلال استدعاء الدالة مع وسيطة واحدة (وستأخذ تلقائيًا قيمة z = 12)
  2. عن طريق استدعاء الوظيفة مع وسيطين.

عندما نسمي الوظيفة: function (12) نقوم بملء شرط كل من الوظيفة (int) والوظيفة (int ، int) وبالتالي يظهر الغموض في المترجم خطأ.

وظيفة مع تمرير حسب المرجع

جافا تجد أكبر رقم في القائمة
# تضمين استخدام دالة مساحة الاسم (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

يعطي البرنامج أعلاه خطأ مفاده أن 'استدعاء التحميل الزائد' fun (int &) 'غامض'. كما نرى ، تأخذ الوظيفة الأولى وسيطة واحدة لعدد صحيح وتأخذ الوظيفة الثانية معلمة مرجعية كوسيطة. في هذه الحالة ، لا يستطيع المترجم فهم الوظيفة التي يحتاجها المستخدم حيث لا يوجد فرق نحوي بين fun (int) و fun (int &) وبالتالي فإنه يطلق خطأ الغموض.

بهذا نصل إلى نهاية التحميل الزائد للوظيفة في C ++. إذا كنت ترغب في معرفة المزيد ، تحقق من بواسطة Edureka ، شركة تعليمية موثوقة عبر الإنترنت. تم تصميم دورة تدريب وإصدار شهادات Java J2EE و SOA من Edureka لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.