Menu
CoddyTech

مراجعة - الحاويات العامة

جزء من قسم البرمجة كائنية التوجه في رحلة C++ على Coddy. الدرس 69 من 104.

challenge icon

التحدي

سهل

لننشئ قالب فئة GenericContainer يجمع كل ما تعلمته عن القوالب في هذا الفصل. ستنشئ حاوية مرنة وآمنة من حيث الأنواع، يمكنها تخزين العناصر ديناميكيًا وتوفير عمليات مفيدة باستخدام تقنيات القوالب.

ستنظم شيفرتك في ملفين:

  • GenericContainer.h: عرّف قالب الفئة هنا. ينبغي أن تقوم GenericContainer بما يلي:

    تخزين العناصر ديناميكيًا باستخدام مؤشر إلى مصفوفة، مع تتبّع الحجم الحالي والسعة.

    توفير هذه الدوال الأساسية:

    • مُنشئ يأخذ سعة ابتدائية
    • مُدمّر يحرر الذاكرة الديناميكية على النحو الصحيح
    • push(T value): يضيف عنصرًا إلى الحاوية (افترض أن السعة كافية دائمًا في هذا التحدي)
    • get(size_t index): يعيد العنصر عند الفهرس المحدد
    • getSize(): يعيد العدد الحالي للعناصر

    أضف قالب دالة باسم printContainer يأخذ GenericContainer<T>& ويطبع جميع العناصر مفصولة بمسافات، ثم يطبع سطرًا جديدًا.

    أنشئ تخصيصًا لقالب printContainer من أجل GenericContainer<bool>، بحيث يطبع true أو false بدلًا من 1 أو 0.

    أضف قالب دالة متغير الوسائط باسم pushAll يأخذ GenericContainer<T>& وأي عدد من القيم، ويدفع كل قيمة إلى الحاوية باستخدام تعبير الطي. يكرّر الطي على عامل الفاصلة، مثل (container.push(args), ...);، تنفيذ الاستدعاء مرة واحدة لكل وسيطة.

  • main.cpp: اقرأ خمس قيم إدخال (كل قيمة في سطر منفصل):
    1. العدد الصحيح الأول
    2. العدد الصحيح الثاني
    3. العدد الصحيح الثالث
    4. قيمة من نوع double
    5. قيمة منطقية على هيئة سلسلة نصية (true أو false)

    وضّح عمل الحاوية من خلال:

    1. إنشاء GenericContainer<int> بسعة 10
    2. استخدام pushAll لإضافة الأعداد الصحيحة الثلاثة دفعة واحدة
    3. طباعة الحجم: Int container size: <size>
    4. استدعاء printContainer لعرض الأعداد الصحيحة
    5. إنشاء GenericContainer<double> بسعة 5
    6. دفع قيمة double والقيمة الحرفية 2.5 باستخدام استدعاءات منفردة لـ push
    7. استدعاء printContainer لعرض قيم double
    8. إنشاء GenericContainer<bool> بسعة 5
    9. دفع قيمة الإدخال المنطقية والقيمة الحرفية false
    10. استدعاء printContainer لعرض القيم المنطقية (ينبغي أن يعرض true/false)

على سبيل المثال، عند إدخال 10 و20 و30 و3.14 وtrue:

Int container size: 3
10 20 30 
3.14 2.5 
true false 

يجمع هذا التحدي بين قوالب الفئات الخاصة بالحاوية، وتخصيص القوالب لطباعة القيم المنطقية بطريقة مخصصة، وقوالب متغيرة الوسائط للدالة المرنة pushAll. تدير حاويتك ذاكرتها بنفسها وفقًا لمبادئ RAII، موضحةً كيفية تكامل القوالب مع إدارة الموارد على نحو سليم.

جرّب بنفسك

#include <iostream>
#include <string>
#include "GenericContainer.h"

using namespace std;

int main() {
    // اقرأ المدخلات
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // حوّل السلسلة النصية إلى bool
    bool boolVal = (boolStr == "true");
    
    // TODO: أنشئ GenericContainer<int> بسعة 10
    
    // TODO: استخدم pushAll لإضافة الأعداد الصحيحة الثلاثة دفعة واحدة
    
    // TODO: اطبع الحجم: "Int container size: <size>"
    
    // TODO: استدعِ printContainer لعرض الأعداد الصحيحة
    
    // TODO: أنشئ GenericContainer<double> بسعة 5
    
    // TODO: أضف قيمة double و2.5 باستخدام استدعاءين منفصلين للدالة push
    
    // TODO: استدعِ printContainer لعرض قيم double
    
    // TODO: أنشئ GenericContainer<bool> بسعة 5
    
    // TODO: أضف قيمة الإدخال المنطقية وfalse
    
    // TODO: استدعِ printContainer لعرض القيم المنطقية
    
    return 0;
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C++ عبر الإنترنت