الفرق بين الظاهري والوظائف الافتراضية الصرفة

مؤلف: Laura McKinney
تاريخ الخلق: 2 أبريل 2021
تاريخ التحديث: 1 قد 2024
Anonim
Hyper V Networking: connecting to virtual networks, LAN and Data Center
فيديو: Hyper V Networking: connecting to virtual networks, LAN and Data Center

المحتوى


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

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

تعدد الأشكال مدعوم باللغتين C ++ و Java. في Java ، يتم استخدام المصطلح "overriding" بدلاً من "دالة افتراضية" ، لأن الوظيفة الافتراضية هي مصطلح C ++.

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

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

أساس للمقارنةوظيفة افتراضيةوظيفة افتراضية نقية
الأساسيالوظيفة الافتراضية لها تعريفها في الفئة الأساسية.دالة Virtual Pure ليس لها تعريف في الفئة الأساسية.
إعلانfunct_name الظاهري (معلمة_قائمة) {. . . . .}؛funct_name الظاهري (معلمة_قائمة) = 0 ؛
فئة مشتقةجميع الفئات المشتقة قد تتجاوز أو لا تتجاوز الوظيفة الافتراضية للفئة الأساسية.يجب أن تتجاوز جميع الفئات المشتقة الوظيفة الافتراضية للفئة الأساسية.
تأثير

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


تعريف الوظيفة الافتراضية

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

إعلان :

الفئة الأساسية {عامة: النوع الظاهري funt_name (قائمة المعلمات) {. . . }} ؛

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

وراثة متعددة المستويات

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


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

تعريف وظيفة الظاهري الصرفة

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

للتعامل مع هذه الحالات أعلاه ، تدعم C ++ مفهوم "وظيفة افتراضية نقية". يتم الإعلان عن "دالة افتراضية خالصة" في الفئة الأساسية ولكن ليس لها تعريفها في الفئة الأساسية. تم الإعلان عن الوظيفة الافتراضية الخالصة على النحو التالي.

النوع الظاهري funct_name (معلمة_قائمة) = 0 ؛

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

فئة مجردة

تسمى الفئة التي تحتوي على دالة نقية واحدة على الأقل "فئة مجردة". لا يمكن إنشاء كائنات لفئات الملخصات ، لكن يمكنك إنشاء مراجع ومؤشرات لفئات الملخصات. يمكن الوصول إلى أعضاء الفئات المجردة من خلال كائن الفئات المشتقة الذي يرث الفئة الأساسية المجردة.

فئة تريد الإعلان عنها مجردة ، استخدم الكلمة الأساسية 'نبذة مختصرة' أمام ال 'صف دراسي' الكلمة.

// على سبيل المثال فئة فئة مجردة {. . النوع الظاهري funct_name (معلمة_قائمة) = 0 ؛ . . }؛

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

ملحوظة:
يبقى النموذج الأولي لـ "الوظيفة الافتراضية" و "الوظيفة الافتراضية الخالصة" كما هو في البرنامج.

خاتمة:

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