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

ورقة C++ المرجعية

آخر تحديث

Hello World وبنية البرنامج

يبدأ التنفيذ من main، التي تُرجع int.

العنصرالكود
تضمين ترويسة#include <iostream>
نقطة الدخولint main() { ... }
طباعة سطرstd::cout << "Hello, World!" << std::endl;
قراءة الإدخالstd::cin >> x;
استخدام مساحة الأسماء stdusing namespace std;
إرجاع النجاحreturn 0;
التعليقات// line و /* block */

أنواع البيانات

النوعالوصف
intعدد صحيح (عادةً 32 بت)
long / long longأعداد صحيحة أوسع
float / doubleأعداد عشرية (نقطة عائمة)
charبايت واحد / حرف
booltrue أو false
std::stringنص ديناميكي من <string>
autoيستنتج المترجم النوع
std::size_tنوع غير مُشار للأحجام والفهارس

المتغيرات والمراجع

المراجع أسماء مستعارة؛ والمؤشرات تحمل العناوين.

العمليةالصياغة
التعريف والتهيئةint x = 5;
التهيئة بالأقواس المعقوفةint x{5};
ثابتconst double PI = 3.14159;
ثابت وقت الترجمةconstexpr int N = 10;
مرجع (اسم مستعار)int &r = x;
مؤشرint *p = &x;
تفكيك مؤشر (dereference)*p = 10;
استنتاج النوعauto y = 3.14;

التحكم في التدفق

العبارةالصياغة
If / elseif (x > 0) { ... } else { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
حلقة whilewhile (i < n) { ... }
حلقة do-whiledo { ... } while (i < n);
حلقة forfor (int i = 0; i < n; i++) { ... }
for قائمة على النطاقfor (auto x : vec) { ... }
for قائمة على النطاق بمرجعfor (auto &x : vec) { ... }
Break / continuebreak; تخرج من حلقة، و continue; تتخطّى إلى التكرار التالي

الدوال

العمليةالصياغة
تعريف دالةint add(int a, int b) { return a + b; }
دون قيمة إرجاعvoid greet() { ... }
وسائط افتراضيةint pow(int b, int e = 2) { ... }
التمرير بالمرجعvoid inc(int &x) { x++; }
مرجع ثابت (دون نسخ)void print(const std::string &s) { ... }
التحميل الزائدint max(int a, int b); و double max(double a, double b);
Lambdaauto f = [](int x) { return x * 2; };
Lambda مع التقاطauto g = [n](int x) { return x + n; };

الأصناف والبرمجة الكائنية (OOP)

العمليةالصياغة
تعريف صنفclass Dog { ... };
محدّدات الوصولpublic:, private:, protected:
متغير عضوstd::string name;
باني (constructor)Dog(std::string n) : name(n) {}
هادم (destructor)~Dog() { ... }
دالة عضوvoid bark() { ... }
إنشاء كائنDog d("Rex");
الوراثةclass Puppy : public Dog { ... };
دالة افتراضية (virtual)virtual void speak();

حاويات STL

حاويات شائعة من المكتبة القياسية.

الحاويةالاستخدام والمثال
std::vector<int>مصفوفة ديناميكية: v.push_back(1); v.size();
std::stringنص: s += "!"; s.length();
std::array<int, 3>مصفوفة ثابتة الحجم مع معلومات الحدود
std::map<K, V>مفتاح-قيمة مرتّب: m["a"] = 1;
std::unordered_map<K, V>خريطة hash (بحث أسرع، دون ترتيب)
std::set<T>قيم فريدة مرتّبة: s.insert(5);
std::pair<A, B>قيمتان: make_pair(1, "x")
std::queue / std::stackمحوّلات طابور FIFO / مكدّس LIFO

خوارزميات ومكرّرات STL

من <algorithm>؛ معظمها يأخذ نطاق مكرّر begin/end.

العمليةالصياغة
مكرّرا البداية / النهايةv.begin(), v.end()
الترتيبstd::sort(v.begin(), v.end());
الترتيب التنازليstd::sort(v.begin(), v.end(), std::greater<int>());
إيجاد قيمةauto it = std::find(v.begin(), v.end(), 5);
عدّ المطابقاتstd::count(v.begin(), v.end(), 5);
العنصر الأصغر / الأكبرstd::max_element(v.begin(), v.end());
جمع نطاقstd::accumulate(v.begin(), v.end(), 0);
تحويل كل عنصرstd::transform(v.begin(), v.end(), v.begin(), fn);

المؤشرات الذكية و C++ الحديثة

فضّل المؤشرات الذكية على new/delete الخامة للتنظيف التلقائي.

الميزةالصياغة
ملكية فريدةauto p = std::make_unique<Dog>("Rex");
ملكية مشتركةauto p = std::make_shared<Dog>("Rex");
مرجع غير مالكstd::weak_ptr<Dog> w = p;
دلالات النقل (move)auto v2 = std::move(v1);
Nullptrint *p = nullptr;
الارتباطات المهيكلةauto [key, val] = *it;
قيمة اختياريةstd::optional<int> maybe;
القوالب (Templates)template <typename T> T add(T a, T b) { return a + b; }

صياغة C++ وحاويات STL والميزات الحديثة التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة C++ المرجعية هذه هي مرجع سريع لكتابة C++ - أنواع البيانات، والمراجع، والأصناف، وحاويات وخوارزميات المكتبة القياسية، والمؤشرات الذكية التي تحلّ محلّ new/delete الخامين.

كل ما هنا هو C++ قياسية (C++11 وما بعدها) ويُترجم بـ g++ أو clang++. انسخ ما تحتاجه، أو جرّب أيّ مقطع برمجي مباشرة في playground الخاص بـ C++ - دون الحاجة إلى تثبيت أي مترجم.

الأسئلة الشائعة حول ورقة C++ المرجعية

هل ورقة C++ المرجعية هذه مجانية؟
نعم. ورقة C++ المرجعية هذه مجانية تمامًا، دون الحاجة إلى التسجيل. أضِفها إلى المفضلة وارجع إليها متى احتجت إلى البحث عن صياغة أو حاوية STL أو مؤشر ذكي.
ما الفرق بين المؤشر والمرجع في C++؟
المؤشر هو متغير يحمل عنوانًا؛ يمكن أن يكون null، ويمكن إعادة إسناده ليشير إلى مكان آخر، وتُفكّكه بـ *p. أمّا المرجع (int &r = x) فهو اسم مستعار لمتغير موجود - يجب ربطه عند التعريف، ولا يمكن أبدًا أن يكون null أو يُعاد ربطه، ويُستخدم مثل المتغير نفسه. استخدم المراجع لمعاملات تمرير-بالمرجع أنظف، والمؤشرات عندما تحتاج إلى توجيه اختياري أو قابل لإعادة الإسناد.
هل ينبغي أن أستخدم new/delete أم المؤشرات الذكية؟
فضّل المؤشرات الذكية. تحرّر std::unique_ptr و std::shared_ptr (عبر make_unique/make_shared) ذاكرتها تلقائيًا عند خروجها من النطاق، ما يمنع التسريبات والتحرير المزدوج الناتجين عن new/delete اليدوي. لا تلجأ إلى new/delete الخام إلا في الكود منخفض المستوى الذي لديه سبب محدّد.
هل يمكنني التدرّب على C++ عبر الإنترنت؟
نعم. افتح playground الخاص بـ C++ لترجمة وتشغيل أيّ مقطع برمجي من هذه الورقة المرجعية في متصفحك - دون الحاجة إلى تثبيت أي مترجم. وعندما ترغب في تعلّم منظّم، تأخذك دورة C++ التفاعلية المجانية من Coddy من المتغيرات والحلقات إلى الأصناف و STL خطوة بخطوة.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من اللبنات الأكثر شيوعًا (الأنواع والتحكم في التدفق والدوال) وصولًا إلى المتقدمة (STL والمؤشرات الذكية)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.
Coddy programming languages illustration

تعلّم C++ مع Coddy

ابدأ الآن