فصل دراسي افتراضي

في البرمجة كائنية التوجه ، تُعرَّف الفئة الأساسية الافتراضية بأنها فئة داخلية متداخلة يمكن إعادة تعريف وظائفها ومتغيراتها بواسطة الفئات الفرعية للفئة الخارجية. [ 1 ] وتُشابه الفئات الافتراضية الدوال الافتراضية .

يعتمد نوع وقت التشغيل لفئة افتراضية على نوع وقت التشغيل لكائن من الفئة الخارجية. (تمامًا كما يحدد نوع وقت التشغيل للكائن الدالة الافتراضية التي يجب استخدامها).

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

غاية

تحل الفئات الافتراضية مشكلة قابلية التوسع المتمثلة في توسيع تجريد البيانات بوظائف وتمثيلات جديدة. ومثل الوظائف الافتراضية، تتبع الفئات الافتراضية نفس قواعد التعريف والتجاوز والإشارة. [ 2 ]

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

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

مثال

على سبيل المثال، يمكن أن تحتوي الفئة الأساسية Machineعلى فئة افتراضية Parts. Carستنفذ الفئة الفرعية هذه الفئة Partsبشكل مختلف عن الفئة الفرعية Bicycle، ولكن يمكن للمبرمج استدعاء أي من الطرق الموجودة في الفئة الداخلية الافتراضية Partsعلى أي Machineكائن من الفئة، والحصول على Partsتنفيذ تلك الفئة المشتقة المحددة.

#include <iostream>class Machine { public : void run () { }class Parts { public : virtual int get_wheels () = 0 ; virtual std :: string get_fuel_type () = 0 ; }; };// قد تُعيد الفئة الداخلية "Parts" من الفئة "Machine" عدد عجلات الآلة. class Car : Machine { public : void run () { std :: cout << "السيارة تعمل." << std :: endl ; } class Parts : Machine :: Parts { public : int get_wheels () override { std :: cout << "للسيارة 4 عجلات." << std :: endl ; return 4 ; } std :: string get_fuel_type () override { std :: cout << "تستخدم السيارة البنزين كوقود." << std :: endl ; return "gasoline" ; } }; };

يمكن الوصول إلى أي كائن من نوع الفئة Machineبنفس الطريقة. يستطيع المبرمج طلب عدد العجلات (باستدعاء الدالة المناسبة get_wheels())، دون الحاجة إلى معرفة نوع الآلة، أو عدد عجلاتها، أو جميع أنواع الآلات الممكنة. get_fuel_type()يمكن إضافة دوال مثل هذه إلى الفئة الافتراضية Partsبواسطة الفئة المشتقة Car.

انظر أيضاً

مراجع

  1. ^ “الفصول الافتراضية” . دليل برمجة CaesarJ . الجامعة التقنية في دارمشتات. 2006-02-10 . تم الاسترجاع 2007-07-30 .
  2. "نظرة عامة على الفصول الدراسية الافتراضية" (ملف PDF) . حساب التفاضل والتكامل للفصول الدراسية الافتراضية . جامعة آرهوس، الدنمارك. 2006. تاريخ الاسترجاع: 30 أبريل 2014 .