الفرق بين الحمولة الزائدة للدالة والتجاوز في C ++

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 9 قد 2024
Anonim
Python Tutorial For Beginners | Python Full Course From Scratch | Python Programming | Edureka
فيديو: Python Tutorial For Beginners | Python Full Course From Scratch | Python Programming | Edureka

المحتوى


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

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

علاوة على ذلك ، نحن ندرس الفرق بين الحمولة الزائدة والتجاوز بمساعدة مخطط المقارنة.


  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. التشابه
  5. خاتمة


رسم بياني للمقارنة:

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


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

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

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

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

التحميل الزائد للفئة {int a، b؛ public: int load (int x) {// first load () function a = x؛ إرجاع } int load (int x، int y) {// second load () function a = x؛ ب = ذ؛ إرجاع * ب ؛ }} ؛ int main () {overload O1؛ O1.load (20)؛ // first load () وظيفة استدعاء O1.load (20،40)؛ // second load () call function}

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

تعريف التجاوز

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

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

تنفيذ التجاوز في C ++

class base {public: virtual void funct () {// virtual function of cout class cout << "This is a class class funct ()"؛ }} ؛ class المشتق 1: public base {public: void funct () {// دالة ظاهرية لفئة الأساس المعاد تعريفها في cout المشتقة من الفئة 1 << "هذا هو funct (1) فئات مشتقة ()"؛ }} ؛ class المشتق 2: قاعدة عامة {public: void funct () {// دالة افتراضية لفئة الأساس المعاد تعريفها في cout المشتقة من فئة class2 << "هذه وظيفة مشتقة من فئات 2 ()"؛ }} ؛ int main () {base * p، b؛ مشتقة 1 د 1 ؛ مشتقة 2 d2 ؛ * ص = & ب. P-> وظي ()؛ / / استدعاء الفئة الأساسية funct (). * ص = & D1. P-> وظي ()؛ / / استدعاء ل 1 funct فئة (). * ص = & D2. P-> وظي ()؛ / / استدعاء ل fun2 فئة مشتقة (). عودة 0 ؛ }

هنا ، هناك فئة أساسية واحدة موروثة بشكل عام بواسطة فئتين مشتقتين. يتم تعريف الوظيفة الافتراضية في فئة أساسية بكلمة رئيسية "افتراضية" ، ويتم إعادة تعريفها بواسطة كلتا الفئتين المشتقتين بدون أي كلمة رئيسية. في main () ، تنشئ الفئة الأساسية متغير المؤشر 'p' وكائن 'b' ؛ ‘المشتقة 1 ′ الفئة تنشئ كائن d1 و تنشئ الفئة المشتقة 2 كائن d2.

الآن ، في البداية ، يتم تعيين عنوان كائن الفئة الأساسية "ب" إلى مؤشر الفئة الأساسية "p". ‘p 'يعطي مكالمة إلى الدالة funct () ، لذلك تسمى وظيفة الفئة الأساسية.ثم يتم تعيين عنوان كائن صنف 1 مشتق "d1" على المؤشر "p" ، ومرة ​​أخرى فإنه يطلق على funct () ؛ هنا يتم تنفيذ الدالة funct () للفئة المشتقة 1. أخيرًا ، يتم تعيين المؤشر 'p' على كائن الطبقة المشتقة 2. ثم calls p calls ‘دالة funct () التي تنفذ الدالة funct () للفئة المشتقة 2.

إذا لم تقم الفئة المشتقة 1 / المشتقة 2 بإعادة تعريف funct () ، فسيتم استدعاء funct () للفئة الأساسية ، لأن الوظيفة الافتراضية تكون "هرمية".

  1. يختلف النموذج الأولي للدالة التي يتم تحميلها بشكل زائد بسبب نوع وعدد المعلمات التي يتم تمريرها إلى الدالة overloaded. من ناحية أخرى ، لا يتغير النموذج الأولي للدالة المتجاوزة لأن وظيفة متجاوزة تقوم بعمل مختلف لفئة مختلفة تنتمي إليها ولكن بنفس نوع وعدد المعلمات.
  2. لا يسبق اسم الوظيفة المثقلة بأية كلمة أساسية ، بينما يسبق اسم الدالة المهجورة بالرمز keyord "الظاهري" في الفئة الأساسية فقط.
  3. تعتمد الدالة overloaded التي تعتمد على نوع أو عدد المعلمة التي يتم تمريرها إلى الدالة. تعتمد الدالة المهجورة التي يتم فيها استدعاء الفئة ، على تعيين عنوان كائن الفئة للفئة ، التي استدعت الدالة.
  4. يتم حل وظيفة overloaded التي سيتم استدعاء أثناء وقت الترجمة. يتم حل أي وظيفة تجاوز يتم استدعاؤها أثناء وقت التشغيل.
  5. البنائين يمكن طاقتها ولكن لا يمكن تجاوزها.
  6. لا يمكن تحميل المدمرات طاقتها ، ولكن يمكن تجاوزها.
  7. التحميل الزائد يحقق الربط المبكر حيث يتم استدعاء الوظيفة الزائدة التي سيتم استدعاء حلها أثناء وقت الترجمة. يحقق Overriding الارتباط المتأخر حيث يتم حل الوظيفة التي سيتم استبدالها أثناء وقت التشغيل.

التشابه

  1. يتم تطبيق كلاهما على وظائف الأعضاء في الفصل.
  2. تعدد الأشكال هو المفهوم الأساسي وراء كل منهما.
  3. يظل اسم الوظيفة كما هو أثناء تطبيق التحميل الزائد والتجاوز على الوظائف.

خاتمة

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