Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

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

challenge icon

التحدي

سهل

لنبنِ قالب class باسم GenericContainer يجمع كل ما تعلمته عن القوالب في هذا الفصل. ستنشئ container مرنًا وآمنًا من ناحية النوع، يمكنه تخزين elements بطريقة dynamic وتوفير عمليات مفيدة باستخدام تقنيات القوالب.

ستنظم الشيفرة عبر ملفين:

  • GenericContainer.h: عرّف قالب class هنا. يجب أن يقوم GenericContainer بما يلي:

    تخزين elements بطريقة dynamic باستخدام مؤشر إلى array، مع تتبّع الحجم current والسعة capacity.

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

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

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

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

    أضف قالب function متغير الوسائط باسم pushAll يأخذ GenericContainer<T>& وأي عدد من القيم، ويدفع كل قيمة منها إلى container باستخدام تعبير fold.

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

    وضّح استخدام container من خلال:

    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. دفع input المنطقي والقيمة الحرفية false
    10. استدعاء printContainer لعرض قيم boolean (من المفترض أن تعرض true/false)

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

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

يجمع هذا التحدي بين قوالب class الخاصة بـ container، وتخصيص القوالب لطباعة bool مخصصة، والقوالب متغيرة الوسائط من أجل function pushAll المرنة. يدير container ذاكرته بنفسه وفق مبادئ 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: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: أنشئ GenericContainer<double> بسعة 5
    
    // TODO: ادفع قيمة double و 2.5 باستخدام استدعاءات push الفردية
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: أنشئ GenericContainer<bool> بسعة 5
    
    // TODO: ادفع المدخل البولياني و false
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

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

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