استخدام الكلمة الافتراضية مع فئة الإعلان

StackOverflow https://stackoverflow.com/questions/828880

  •  06-07-2019
  •  | 
  •  

سؤال

سئلت في مقابلة ذلك ما هو استخدام الكلمة الافتراضية مع فئة الإعلان في C++ و أجبت أن الكلمة الافتراضية لا يمكن استخدامها مع فئة الإعلان في C++.المقابلة قال أنه من الممكن طلب مني اختبار في وقت لاحق.

الآن بعد أن تحققت من ذلك بنفسي لقد جئت لمعرفة أن هذا ممكن و هذا ليس خطأ برنامج التحويل البرمجي.في الواقع عندما كنت تفعل شيئا من هذا القبيل مع التحويل البرمجي Visual C++:

virtual class Test
{
   int i;
};

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

هل كانت مفيدة؟

المحلول

وهذا خطأ في VC ++. كومو ودول مجلس التعاون الخليجي على حد سواء رفض التعليمات البرمجية.

نصائح أخرى

الظاهري يمكن أن تستخدم عندما تكون نابعة من فئة أخرى:

class Foo : public virtual Bar
{
}

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

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

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

و

  class A : virtual public B, public C {
    ...
  };

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

ويمكن أن تجد وصفا أكثر شمولا مع مخططات الطبقة <لأ href = "http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp؟topic=/com.ibm.xlcpp8l.doc /language/ref/cplr135.htm "يختلط =" نوفولو noreferrer "> هنا .

وربما كان يشير إلى / فئات أساسية افتراضية الميراث الظاهري؟ منها مثلا.

class A : virtual public B
{ ... }

وهذا من شأنه أن يكون من الناحية الفنية جزءا من تعريف الفئة.

ويمكن انه تم الحديث حول استخدام قاعدة الطبقة الظاهرية في تعريف فئة؟

ومثل هذا:

class CashierQueue : virtual public Queue {};

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

class Queue {};
class CashierQueue : virtual public Queue {};
class LunchQueue : virtual public Queue {};
class LunchCashierQueue : public LunchQueue, public CashierQueue {};

http://msdn.microsoft.com /en-us/library/wcz57btd(VS.80).aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top