البرمجة

توريث الدوال في 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، مما يعني أن الذاكرة التي تم تخصيصها لهذه الكائنات ستتم إعادتها تلقائيًا عندما تنتهي نطاق الحياة للمؤشرات عليها، وهذا يساعد في تجنب تسريب الذاكرة.

مقالات ذات صلة

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر