الطبقة الأساسية الافتراضية
في عملية الميراث التي تعلمتها من قبل، أتساءل عما إذا كنت قد فكرت في هذا الموقف: في علاقة الميراث المتعددة، إذا ورثت فئة مشتقة من فئتين أصليتين، وورثت هاتان الفئتان الأصليتان من فئة واحدة موروثة من القاعدة فصل. سيكون ذلك مزعجًا، لأنك قد ترث نسختين من نفس العضو!
وهذا يؤدي إلى ما يسمى بمشكلة الغموض ، فلنبدأ بالدراسة!
اسمحوا لي أولاً أن أقدم لكم مثالاً يوضح هذا النوع من الميراث المتعدد! فكرت في الأمر وتوصلت إلى هذا المثال: كانت هناك عائلة ثرية في البداية، وكان السيد الرجل هو المسؤول ويحتفظ بمفتاح الباب. وبعد ذلك، كان لديهم ولدان بعد سنوات قليلة، كبروا وكان السيد كبيرًا في السن، لذا قام بمطابقة مفتاحين آخرين وأعطاهما لابنيه على التوالي، وتركهما يتوليان مسؤولية أعمال العائلة. بعد سنوات عديدة، تزوج الابنان أيضًا. وكان هناك صبي وفتاة على التوالي، يحملان على خط الأسرة. الأشخاص المزعومون مزدهرون، وبعد ذلك كبروا، وحان الوقت لتسليم المفتاح في العصور القديمة، كان المفتاح بالطبع ينتقل إلى الصبي، لذلك بالطبع تم تسليم المفتاح إلى الحفيد هذه المرة، كان على والد الحفيد وعمه (أي ابني المالك الأصليين) أن يعطوا الحفيد مفتاحًا، لذلك كان لديه مفتاحان. نظر الحفيد الصغير إلى المفتاحين في يده وقال: "واحد يكفي! اثنان... أليس هذا هدراً؟"
بعد قراءة هذه القصة، سيكون من الأسهل على الجميع فهم الميراث. بطل الرواية الأصلي في القصة، الجد، هو الطبقة الأساسية، ولديه فئتان مشتقتان، وابن أحدهما هو الصغير. صن تزو هو آخر فئة مشتقة لأنه يرث من فئتين مشتقتين. وهاتان الفئتان المشتقتان لهما عضو مشترك (مفتاح، لأنهما يرثان نفس الفئة الأساسية - الجد). تحتوي الفئة المشتقة الأخيرة من Sun Tzu على عضوين مكررين (مفاتيح)، وهذا مصدر الغموض!
وفيما يلي نتبع هذا المثال ونكتب الكود خصيصاً، يمكنك الرجوع إليه:
/***************************: /حقوق النشر:www.dotcpp.com//التاريخ:2017/12/18********************************* * *******/#include<iostream>usingnamespacestd;classGrandfather{public:intkey;public:};classFather1:publicGrandfather{};classFather2:publicGrandfather{};classGrandson:publicFather1,publicFather2{};intmain(){ GrandsonA ;//A.key=9;return0;}الكود هو مظهر من مظاهر القصة الآن، لتسهيل الوصف، فإن الفئات الأربع المحددة فارغة. أي أن فئة الحفيد ترث فئتين أب وستحتوي على عضوين رئيسيين. إذا حاولت استخدام هذا المفتاح في هذا الوقت، فيرجى ملاحظة أنه تم الإعلان عنه كنوع عام عند محاولة تعيين قيمة في الوظيفة الرئيسية ، ستكون هناك رسالة خطأ "ليست فريدة من نوعها، غامضة"، أي حدوث ما يسمى بمشكلة الغموض، ويمكن للجميع فهمها جيدًا.
فكيف يمكن تجنب هذه المشكلة؟ هذا هو الوقت الذي تحتاج فيه إلى استخدام الفئات الأساسية الافتراضية ! ما يسمى بالفئة الأساسية الافتراضية هو تعديلها باستخدام الفئة الافتراضية قبل وراثة النوع العام، على سبيل المثال، في هذا المثال، تحتاج فئة الأب فقط إلى إضافة فئة افتراضية إضافية عند وراثة فئة الجد ستحتفظ الفئة والفئة الأساسية فقط بنسخة من كائن الفئة الأساسية. تجنب النسخ المتعددة والغموض.
تتمثل طريقة التعريف في إضافة إعلان افتراضي عند اشتقاق الفئتين الأصليتين:
فئة الأب 1: جد عام افتراضي فئة الأب 2: جد عام افتراضي
يبقى الباقي دون تغيير. يمكنك اختباره على جهاز الكمبيوتر الخاص بك لفهم توليد الغموض واستخدام الفئات الأساسية الافتراضية.