البرمجة

توريث الدوال في C++

في الشفرة التي قدمتها، تواجه مشكلة في استدعاء دالة toString() المناسبة بسبب أن الدالة scan() تعيد قيمة من نوع A، وبالتالي ستستدعي toString() من A حتى لو كانت القيمة التي تم إنشاؤها من نوع B. لحل هذه المشكلة، يمكنك استخدام مؤشر أو مرجع بوليمورفي للقيام بذلك. إليك كيف يمكن تعديل الشفرة لتحقيق هذا:

ملحوظة: تأكد من استخدام الكلمة الرئيسية virtual لدالة toString() في A للسماح بالاستدعاء البوليمورفي لهذه الدالة، واستخدام الكلمة الرئيسية override في B للإشارة إلى أنها تعيد تعريف دالة موجودة في الفئة الأساسية.

المزيد من المعلومات

بالطبع! في الكود الذي قمت بتقديمه، يتم استخدام المفهوم الأساسي للوراثة في لغة C++. هذا يعني أنه يمكن لفئة مشتقة مثل B أن ترث السلوك والخصائص من الفئة الأساسية A، وبالتالي يمكن لـB تعديل أو استبدال سلوك الوظائف التي تمتلكها A بنسخها الخاصة.

في هذه الحالة، قمت بتعريف دالة toString() كـvirtual في A وقمت بتجاوزها (override) في B، مما يعني أن دالة toString() في B ستتم استدعاؤها عندما يتم استدعاء toString() على كائن من نوع B، بينما سيتم استدعاء toString() في A عندما يتم استدعاء toString() على كائن من نوع A.

بالإضافة إلى ذلك، قمت باستخدام std::unique_ptr لإدارة الذاكرة لكائنات A و B، مما يعني أن الذاكرة التي تم تخصيصها لهذه الكائنات ستتم إعادتها تلقائيًا عندما تنتهي نطاق الحياة للمؤشرات عليها، وهذا يساعد في تجنب تسريب الذاكرة.

زر الذهاب إلى الأعلى