سؤال

ماذا يعني بالضبط من technical point of view, ، فهمت أن هذا يعني أني derived class يمكن تحويلها دائمًا إلى base class, ، هذا هو؟ قرأت بعض المواد دون أي إشارة إلى الجوانب التقنية ، الفلسفة فقط! شكرا مقدما

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

المحلول

وهذا يعني أنه يمكن دائمًا تحويل صفي المشتق إلى فئة قاعدة

في الواقع يعني أفضل من ذلك. int يمكن تحويلها دائمًا إلى float, ، لكن هذا لا يعني أن "int" هو "تعويم". هذا يعني فقط أن تعويم يمكن بناء من int. وبالمثل ، يمكنك أن يكون لديك فئات محددة من قبل المستخدم يتم تحويلها ، ولكن ليس لها علاقة أخرى.

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

تعريف رسمي واحد إذا "هو" هو باربرا ليسكوف مبدأ الاستبدال. وهو أمر لا يزال من المسلم به أنه لا يزال فلسفة ، لكنه فلسفة سليمة للغاية ويرتبط مباشرة بكيفية كتابة البرامج.

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

*] ويكون الكائن متاحًا بشكل صحيح من خلال المؤشر ، أي. يمكنك دائمًا إجبار أنواع المؤشرات مع reinterpret_cast, ، لكن هذا ليس ما أعنيه هنا. وهناك بعض التفاصيل اللطيفة - إذا كانت الفئة الأساسية غامضة ، فلا يمكنك تحويل المؤشر دفعة واحدة ، ولكن يمكنك القيام بذلك بشكل صريح باستخدام العديد من القوالب التي لا لبس فيها. إذا كانت الفئة الأساسية غير متاحة لك يستطيع قم بتحويلها ، ولكن فقط باستخدام طراز C ، وليس ضمنيًا. أعمال الممثلين على الطراز C مثل أ static_cast الذي يتجاهل إمكانية الوصول ، وليس مثل أ reinterpret_class. لذا ، تحصل على مؤشر عاملة ، لكن نأمل أيضًا أن تكون كذلك أنك تفعل شيئًا خاطئًا جدًا ؛-)

نصائح أخرى

يمكن تحويل الفئة المشتقة إلى فئة قاعدة يمكن الوصول إليها ولا لبس فيها فقط في نقطة معينة R. لا يوجد ندرة في المراجع وما هو المكان الآخر من معيار C ++ نفسه.

10.2 دولار هو مرجع جيد: يمكن أن تكون الفئة المشتقة نفسها بمثابة فئة أساسية للتحكم في الوصول ؛ انظر 11.2. يمكن تحويل مؤشر إلى فئة مشتقة ضمنيًا إلى مؤشر إلى فئة قاعدة لا يمكن الوصول إليها (4.10). يمكن أن يكون LVALUE لنوع الفئة المشتقة مرجعًا إلى فئة قاعدة لا يمكن الوصول إليها (8.5.3). - ملاحظة

ومره اخرى

$ 10.3-"يحدد قائمة المحددات الأساسية نوع المشروعات الفرعية الفئة الأساسية الموجودة في كائن من نوع الفئة المشتقة. [..] هنا ، سيكون للكائن من الفئة المشتقة 2 كائن فرعي من الفئة المشتقة والذي سيكون بدوره يحتوي على فرعية من قاعدة الطبقة. [...

من حيث مبادئ ooad:

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

انظر أيضًا إلى LSP كما هو موضح في منشور Steves '

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