C ++: تجنب الصيانة المزدوجة في التسلسلات الهرمية الميراث

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

  •  23-09-2019
  •  | 
  •  

سؤال

عند إنشاء بنية وراثة C ++ ، يجب عليك تحديد وظائف الأعضاء كما هو بالضبط في أماكن متعددة:

إذا كانت B عبارة عن فئة أساسية مجردة ، و D و E و F جميعها ترث من B ، فقد يكون لديك هذا:

class B
{
   virtual func A( ... params ) = 0;
};

class D : public B
{
   func A( ... params );
};

/* ... etc... similar implementations for E and F */

لذلك ، من الواضح أن هناك بعض الازدواجية هنا. إذا كانت الواجهة إلى B كبيرة ، فقد يكون لديك العديد من الأماكن للتغيير إذا كانت الواجهة بحاجة إلى تغيير.

اقترح زميل في العمل بعض الخداع مع #includes تم إنشاؤه الحرفي ، ala:

class D: public B
{
   #include "B_Interface.h"  // B_Interface.h is a specially crafted .h file
}

هذا يبدو كلودجي قليلا؟ فعلا؟ هل هناك حل أفضل لتجنب الصيانة المزدوجة؟

أيضًا ، ربما يكون الحل هنا هو أدوات أفضل حقًا لدعم اللغة ، مثل Visual Assist X؟

تحرير: افترض أن الفئات المشتقة يجب أن يكون لها تطبيقات فريدة.

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

المحلول

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

نصائح أخرى

أنه من المؤلم تغيير الواجهة المستخدمة على نطاق واسع ليست خطأ ؛ إنها ميزة.

أيضًا ، ربما يكون الحل هنا هو أدوات أفضل حقًا لدعم اللغة ، مثل Visual Assist X؟

بالضبط. تغيير توقيعات الطريقة هو أ الميزة الرئيسية من أدوات إعادة التهيئة.

إذا كان عليك تنفيذها مرارًا وتكرارًا مع بعض السلوك الافتراضي ، فربما يجب أن تكون افتراضية وليست افتراضية خالصة.

بدلاً من استخدام المعالج المسبق بطريقة أخرى ، لا ينبغي استخدامها ، سأجرب المحرر الخاص بي (أو IDE ، إذا كان هذا هو ما تتخيله.)

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