🔥 أحدث الأخبار

موقع يهتم بكل ماهو جديد في عالم التكنولوجيا والرياضة

كورس C++ المتقدم – الحلقة الأولى: Templates (القوالب البرمجية)


 

كورس C++ المتقدم – الحلقة الأولى: Templates (القوالب البرمجية)

#برمجة

مقدمة

مرحباً بك في أول حلقة من المستوى المتقدم في C++.

لقد أكملت:

  • المستوى المبتدئ
  • المستوى المتوسط
  • هياكل البيانات الأساسية
  • OOP
  • STL الأساسية

والآن سنبدأ مرحلة الاحتراف.

أول موضوع سنتعلمه هو:

Templates

وهو من أقوى ميزات C++ وأكثرها استخداماً داخل المكتبات الاحترافية مثل:

وهو السبب الرئيسي وراء وجود:

  • Vector
  • Queue
  • Stack
  • Map
  • Set

ما هي Templates؟

تخيل أنك كتبت دالة لجمع رقمين:

int add(int a, int b)
{
    return a + b;
}

تعمل مع:

int

لكن ماذا لو أردت استخدامها مع:

double

أو:

float

أو:

long

ستضطر لكتابة نفس الدالة عدة مرات.


مثال سيء

int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{
    return a + b;
}

float add(float a, float b)
{
    return a + b;
}

الكود بدأ يتكرر.


الحل: Templates

template<typename T>

T add(T a, T b)
{
    return a + b;
}

شرح

template<typename T>

تعني:

أنشئ قالباً عاماً لأي نوع بيانات.


أول مثال عملي

#include <iostream>
using namespace std;

template<typename T>
T add(T a, T b)
{
    return a + b;
}

int main()
{
    cout << add(10,20) << endl;

    cout << add(2.5,3.5) << endl;

    return 0;
}

الناتج

30
6

كيف يعمل Template؟

عندما تكتب:

add(10,20);

يقوم المترجم بإنشاء:

int add(int a,int b)

خلف الكواليس.


وعندما تكتب:

add(2.5,3.5);

يقوم بإنشاء:

double add(double a,double b)

تلقائياً.


Template مع النصوص

#include <iostream>
using namespace std;

template<typename T>
T maximum(T a, T b)
{
    return (a > b) ? a : b;
}

int main()
{
    cout << maximum(50,20);

    return 0;
}

الناتج

50

إنشاء دالة عامة للطباعة

#include <iostream>
using namespace std;

template<typename T>
void print(T value)
{
    cout << value << endl;
}

int main()
{
    print(100);

    print(5.6);

    print("Hello");

    return 0;
}

استخدام أكثر من نوع

أحياناً نحتاج نوعين مختلفين.


مثال

template<typename T1, typename T2>

void show(T1 name, T2 age)
{
    cout << name << endl;
    cout << age << endl;
}

الاستخدام

show("Ahmed",20);

Class Templates

حتى الآن استخدمنا Templates مع الدوال.

لكن يمكن استخدامها مع الكلاسات أيضاً.


مثال

template<typename T>

class Box
{
public:

    T value;

    void setValue(T v)
    {
        value = v;
    }

    T getValue()
    {
        return value;
    }
};

الاستخدام

Box<int> b1;

b1.setValue(100);

cout << b1.getValue();

مثال آخر

Box<string> b2;

b2.setValue("Welcome");

cout << b2.getValue();

كيف يعمل Vector؟

عندما تكتب:

vector<int> numbers;

فإن Vector في الأصل عبارة عن:

template<class T>

ثم يتم استبدال T بـ int.


مثال مشابه

template<typename T>

class Storage
{
private:

    T data;

public:

    Storage(T d)
    {
        data = d;
    }

    void show()
    {
        cout << data << endl;
    }
};

الاستخدام

Storage<int> s1(50);

Storage<string> s2("Hello");

Template غير نوعي (Non-Type Template)

يمكن تمرير قيمة ثابتة أيضاً.


مثال

template<int SIZE>

class Numbers
{
public:

    int arr[SIZE];
};

الاستخدام

Numbers<100> nums;

مشروع عملي

إنشاء آلة حاسبة عامة.

#include <iostream>
using namespace std;

template<typename T>

class Calculator
{
public:

    T add(T a, T b)
    {
        return a + b;
    }

    T sub(T a, T b)
    {
        return a - b;
    }

    T mul(T a, T b)
    {
        return a * b;
    }

    T divi(T a, T b)
    {
        return a / b;
    }
};

int main()
{
    Calculator<double> calc;

    cout << calc.add(10.5,5.5);

    return 0;
}

مميزات Templates

✔ تقليل تكرار الكود

✔ مرونة عالية

✔ أداء ممتاز

✔ أساس STL

✔ تستخدم في المشاريع الكبيرة


عيوب Templates

❌ رسائل الأخطاء قد تكون طويلة

❌ تزيد وقت الترجمة أحياناً

❌ قد تصبح معقدة عند الاستخدام المفرط


أين تستخدم Templates؟

  • STL
  • محركات الألعاب
  • أنظمة التشغيل
  • مكتبات الذكاء الاصطناعي
  • البرامج الضخمة

تمارين

التمرين 1

أنشئ Template لدالة جمع.


التمرين 2

أنشئ Template لدالة إيجاد الأكبر.


التمرين 3

أنشئ Class Template لتخزين قيمة.


التمرين 4

أنشئ Class Template يحتوي على مصفوفة.


التمرين 5

اصنع آلة حاسبة عامة تدعم:

  • int
  • float
  • double

ملخص الحلقة الأولى

تعلمنا:

  • Function Templates
  • Class Templates
  • Multiple Templates
  • Non-Type Templates
  • كيفية عمل STL داخلياً
  • بناء مشاريع عامة قابلة لإعادة الاستخدام

في الحلقة الثانية من المستوى المتقدم سنتعلم:

🔥 Exception Handling (معالجة الأخطاء)

وسنتعرف على:

  • try
  • catch
  • throw
  • إنشاء أخطاء مخصصة
  • حماية البرامج من الانهيار
  • بناء أنظمة احترافية لمعالجة الأخطاء

وهذا من أهم المواضيع في البرامج الحقيقية والاحترافية. 🚀

تعليقات

💬 🙋🏻‍♂️