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

يعرض مقتطف الكود المحدد وظيفتين لفئة `objectStack`: `top()` و`pop()`. تهدف الدالة `top()` إلى إرجاع الكائن الموجود في الجزء العلوي من المكدس. من ناحية أخرى، من المتوقع أن تقوم الدالة `pop()` بإزالة وإرجاع الكائن العلوي من المكدس.

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

تتمثل مهمتك في إصلاح المشكلات الموجودة في مقتطف التعليمات البرمجية وتنفيذ معالجة الاستثناءات المناسبة لضمان معالجة شروط التدفق السفلي للمكدس بشكل صحيح.

اكتب برنامجاً يحقق ما يلي:

1. قم بتنفيذ فئة `objectStack` بالوظائف التالية:
   - `object *top()`: يجب أن تُرجع هذه الوظيفة العنصر الموجود أعلى المكدس دون إزالته. تعامل مع حالة تجاوز سعة المكدس عن طريق طرح استثناء `stackunderflow` مع الرسالة: "حدث تجاوز سعة المكدس في الدالة top()".
   - `object *pop()`: يجب أن تقوم هذه الوظيفة بإزالة العنصر العلوي من المكدس وإعادته. تعامل مع حالة تجاوز سعة المكدس عن طريق طرح استثناء `stackunderflow` مع الرسالة: "حدث تجاوز سعة المكدس في وظيفة pop()".

2. قم بتنفيذ فئة الاستثناء `stackunderflow` بالوظائف التالية:
   - `stackunderflow(const std::string &message)`: يجب أن يأخذ هذا المُنشئ سلسلة رسائل كوسيطة ويخزنها كرسالة خطأ.

3. اختبر التنفيذ الخاص بك عن طريق إجراء العمليات التالية:
   - قم بإنشاء مثيل `objectStack` يسمى `stack`.
   - اتصل بـ `pop()` على المكدس الفارغ واحصل على استثناء `stackunderflow`. طباعة رسالة الاستثناء.
   - ادفع كائنًا إلى المكدس.
   - استدعاء `top()` على المكدس وطباعة الكائن الذي تم إرجاعه (دون إزالته).
   - استدعاء `pop()` على المكدس وطباعة الكائن الذي تم إرجاعه.
   - اتصل بـ `pop()` على المكدس الفارغ واحصل على استثناء `stackunderflow`. طباعة رسالة الاستثناء.

تأكد من أن التنفيذ الخاص بك يتعامل بشكل صحيح مع ظروف التدفق السفلي للمكدس وينتج المخرجات المتوقعة.
{"evolved_from": null, "kind": "synthetic", "source": "argilla/DistiCoder-dpo-binarized"}