كورس 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
- مع تصميم احترافي حقيقي
- مثل المشاريع الموجودة في الشركات 🚀

تعليقات
إرسال تعليق