الدرس 9 من 10

الأصناف

هدف الدرس

private والمُنشئ والتغليف

01

الشرح

حقول struct مكشوفة لكل من يمسك الكائن: لا شيء يمنع hero.hp = -50;. وclass الفكرة نفسها بفرق واحد: أعضاؤها خاصّة افتراضيًّا. ما تحت public: يستعمله الخارج، وما تحت private: لا تمسّه إلا دوال الصنف نفسه، والوصول إليه من الخارج خطأ ترجمة: المترجم نفسه يحرس القاعدة.

والمُنشئ دالة باسم الصنف بلا نوع إرجاع، تُنفَّذ عند الإنشاء: Inventory bag(3);. وهو الحارس الأول: الكائن سليم من لحظته الأولى، فالسعة السالبة تصير صفرًا قبل أن يراها أحد. ولا يتشارك حقل ودالة اسمًا واحدًا، فالعُرف شرطة سفلية في آخر الحقل الخاصّ: capacity_ للحقل وcapacity() للدالة.

هذا هو التغليف: قاعدة «لا تتجاوز العناصر السعة» تصمد لأن الطريق الوحيد لإضافة عنصر هو add، وهي تفحص ثم تُرجع false بدل أن تكسر القاعدة. ودوال القراءة const كما في الدرس السابق. وعلى هذا تُبنى أصناف المحرّكات: البيانات خاصّة، وأمامها دوال تتحقّق قبل أن تغيّر.

02

المطلوب

أكمل صنف Inventory، حقيبة لاعب بعدد خانات محدود: يُنشأ بـ Inventory bag(3)، والسعة السالبة تصير صفرًا. وbool add(const std::string& item) تضيف العنصر وتُرجع true إن بقي مكان، وإلا تُرجع false ولا تضيف شيئًا. وbool has(const std::string& item) const هل العنصر في الحقيبة، وint count() const عدد ما فيها، وint capacity() const سعتها. والبيانات في capacity_ وitems_ خاصّة.

معايير التصحيح

5 معايير
  1. الحقيبة الجديدة فارغة بسعتها
  2. add تضيف وتُرجع true، و has تجد ما أُضيف
  3. add ترفض حين تمتلئ ولا تتجاوز السعة
  4. السعة السالبة تصير صفرًا فلا يدخل شيء
  5. has: ما لم يُضف ليس في الحقيبة
main.cpp
المخرجاتC++17 · GCC 9 · Judge0

يُترجَم الكود ويعمل على السيرفر…

–/5

يُترجَم الكود ويعمل على السيرفر…

5 معايير في بطاقة «المطلوب».