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

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

كورس C++ المتقدم – الحلقة التاسعة: Modern C++ (C++11/14/17/20)


 

كورس C++ المتقدم – الحلقة التاسعة: Modern C++ (C++11/14/17/20)

#برمجة

مقدمة

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

في الحلقات السابقة تعلمنا:

  • OOP المتقدم
  • Design Patterns
  • STL المتقدم
  • Multithreading
  • Smart Pointers
  • Templates و Lambdas

اليوم سندخل إلى أهم نقلة في لغة C++:

Modern C++

أي C++ الحديثة (C++11 إلى C++20)


لماذا Modern C++ مهم؟

لأنه يجعل الكود:

✔ أقصر
✔ أوضح
✔ أسرع كتابة
✔ أكثر أماناً

ويستخدم في جميع المشاريع الحديثة.


أولاً: auto

الفكرة

المترجم يحدد نوع المتغير تلقائياً


مثال

#include <iostream>
using namespace std;

int main()
{
    auto x = 10;
    auto y = 5.5;
    auto name = "Ahmed";

    cout << x << endl;
    cout << y << endl;
    cout << name << endl;

    return 0;
}

الناتج

10
5.5
Ahmed

لماذا auto مهم؟

بدلاً من كتابة:

vector<int>::iterator it;

تصبح:

auto it = v.begin();

ثانياً: nullptr

المشكلة القديمة

int* p = NULL;

الحل الحديث

int* p = nullptr;

لماذا أفضل؟

✔ واضح
✔ آمن
✔ لا يسبب أخطاء مقارنة


ثالثاً: Range-based for loop

قبل

for(int i = 0; i < v.size(); i++)
{
    cout << v[i];
}

الآن

for(int x : v)
{
    cout << x << endl;
}

مثال كامل

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v = {1,2,3,4};

    for(int x : v)
    {
        cout << x << " ";
    }

    return 0;
}

رابعاً: Structured Bindings (C++17)

مثال

#include <iostream>
#include <tuple>
using namespace std;

int main()
{
    pair<int, string> p = {1, "Ahmed"};

    auto [id, name] = p;

    cout << id << endl;
    cout << name << endl;

    return 0;
}

الناتج

1
Ahmed

خامساً: std::optional

الفكرة

قيمة قد تكون موجودة أو لا


مثال

#include <iostream>
#include <optional>
using namespace std;

optional<int> findNumber(bool found)
{
    if(found)
        return 10;
    else
        return nullopt;
}

int main()
{
    auto result = findNumber(true);

    if(result)
        cout << *result;
    else
        cout << "Not found";

    return 0;
}

سادساً: std::variant

الفكرة

متغير يمكن أن يحمل أكثر من نوع


مثال

#include <iostream>
#include <variant>
using namespace std;

int main()
{
    variant<int, string> v;

    v = 10;
    v = "Hello";

    cout << get<string>(v);

    return 0;
}

سابعاً: Lambda الحديثة (C++14+)

مثال

auto add = [](auto a, auto b)
{
    return a + b;
};

الاستخدام

cout << add(10, 20);
cout << add(2.5, 3.5);

ثامناً: decltype

الفكرة

معرفة نوع التعبير


مثال

int x = 10;

decltype(x) y = 20;

تاسعاً: Smart Modern Loop (auto + range)

for(auto x : {1,2,3,4,5})
{
    cout << x << endl;
}

عاشراً: تحسين الكود الحديث

قبل

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

بعد (Modern)

auto add = [](auto a, auto b)
{
    return a + b;
};

مقارنة قديم vs حديث

قديم حديث
طويل مختصر
صعب واضح
يدوي تلقائي
أخطاء أكثر آمن أكثر

مثال عملي شامل

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> v = {5,10,15,20};

    auto sum = 0;

    for(auto x : v)
    {
        sum += x;
    }

    cout << sum << endl;

    return 0;
}

أين يستخدم Modern C++؟

✔ شركات البرمجة
✔ الألعاب
✔ الذكاء الاصطناعي
✔ أنظمة التشغيل
✔ التطبيقات الكبيرة


أخطاء شائعة

❌ استخدام auto بدون فهم النوع
❌ get<> مع variant خطأ
❌ تجاهل nullopt
❌ الخلط بين C++ القديم والجديد


تمرين 1

استخدم auto مع vector.


تمرين 2

استخدم range-based loop.


تمرين 3

اكتب دالة lambda عامة.


تمرين 4

استخدم optional لنتيجة بحث.


تمرين 5

استخدم structured bindings مع pair.


ملخص الحلقة التاسعة

تعلمنا:

  • auto
  • nullptr
  • range-based loops
  • structured bindings
  • optional
  • variant
  • decltype
  • lambdas الحديثة
  • كتابة C++ حديثة ونظيفة

في الحلقة العاشرة (الأخيرة من المستوى المتقدم) سنتعلم:

🔥 مشروع احترافي كامل (C++ Real Project)

وسنقوم ببناء:

  • نظام إدارة مكتبة أو طلاب
  • باستخدام STL + OOP + Files + Smart Pointers
  • مع تصميم احترافي حقيقي
  • مثل المشاريع الموجودة في الشركات 🚀

تعليقات

💬 🙋🏻‍♂️