c++ - متى تستخدم قالب مقابل الميراث



templates inheritance (4)

"الرد المشترك" خطأ. في "C ++ الفعال" ، يقول سكوت مايرز في البند 41:

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

يواصل مايرز تلخيص:

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

https://ffff65535.com

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


استخدام قالب في قاعدة (أو تكوين) عندما تريد الاحتفاظ بنوع الأمان أو ترغب في تجنب إرسال ظاهري.


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

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

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


يصف القالب خوارزمية مثل تحديد نتيجة مقارنة بين كائنين من فصل دراسي أو فرزها. يختلف نوع (فئة) الكائنات قيد التشغيل ولكن العملية أو المنطق أو الخطوة إلخ هي نفسها منطقية.

من ناحية أخرى يتم استخدام التوارث من قبل فئة الطفل فقط لتوسيع أو جعل وظائف الآباء أكثر تحديدًا. نأمل أن يكون له معنى





inheritance