تخطَّ إلى المحتوى

مرجع C++ بالعربي

كل كلمة مفتاحية وحاوية ودالة قياسية في C++ بالعربي: ماذا تفعل، صياغتها، مثال يوضّحها، وأشهر الأخطاء — لغة مُترجَمة فلا يوجد تشغيل حي في المتصفح. حاليًا 39 عنصر — والقائمة تكبر.

أساسيات اللغة

البرمجة الكائنية

class

الأصناف

class تعرّف نوعًا جديدًا يجمع بيانات (أعضاء) ودوالًا تعمل عليها (دوال أعضاء) — حجر الأساس بالبرمجة كائنية التوجّه.

struct

الهياكل

struct مطابقة لـ class تمامًا في C++ إلا أن أعضاءها public افتراضيًا — تُستخدم عرفًا للبيانات البسيطة بلا سلوك معقّد.

this

المؤشّر this

this مؤشّر ضمني متاح داخل كل دالة عضو غير static، يشير إلى الكائن الحالي الذي استُدعيت الدالة عليه.

virtual

الدوال الافتراضية

virtual تجعل استدعاء الدالة يُحدَّد وقت التشغيل حسب النوع الفعلي للكائن، لا حسب نوع المؤشّر أو المرجع المُعلَن — أساس تعدّد الأشكال.

override

تصريح إعادة التعريف

override كلمة اختيارية لكن مهمة توضع بعد دالة بصنف مشتق لتؤكد أنها فعلًا تُعيد تعريف دالة virtual من الصنف الأساس.

friend

الدوال والأصناف الصديقة

friend تمنح دالة أو صنفًا خارجيًا حق الوصول للأعضاء الخاصة (private) لصنف معيّن، كاستثناء مضبوط لقاعدة التغليف.

enum class

التعدادات المحكومة

enum class تعريف حديث للتعدادات (C++11) يمنع تسريب أسمائها للنطاق المحيط ويمنع تحويلها الضمني لعدد صحيح — أأمن من enum التقليدية.

الذاكرة والموارد

new / delete

التخصيص الديناميكي اليدوي

new يحجز ذاكرة على الكومة (heap) ويُرجع مؤشّرًا لها، وdelete يحرّرها يدويًا — الأداة الأصلية لإدارة الذاكرة بـ C++ قبل الإشارات الذكية.

RAII

مبدأ حجز الموارد كتهيئة

RAII (Resource Acquisition Is Initialization) مبدأ تصميم أساسي بـ C++: اربط عمر أي مورد (ذاكرة، ملف، قفل) بعمر كائن، فيتحرر تلقائيًا وقت خروج النطاق حتى لو حدث استثناء.

std::move

دلالات النقل

std::move لا تنقل شيئًا فعليًا — تحوّل تعبيرًا إلى rvalue reference، ما يخبر المترجم أنه يمكن «سرقة» موارده الداخلية بدل نسخها.

std::unique_ptr

المؤشّر الذكي الحصري

std::unique_ptr مؤشّر ذكي يملك كائنًا على الكومة حصريًا ويحرّره تلقائيًا بالهادم — تطبيق مباشر لمبدأ RAII، ولا يمكن نسخه.

std::shared_ptr

المؤشّر الذكي المشترك

std::shared_ptr مؤشّر ذكي يسمح لعدة مالكين بمشاركة نفس الكائن، عبر عدّاد مراجع يحرّر الذاكرة تلقائيًا عند وصوله للصفر.

std::weak_ptr

المؤشّر الضعيف

std::weak_ptr يراقب كائنًا يملكه shared_ptr دون زيادة عدّاد المراجع — يكسر دورات المراجع التي تسبب تسريب ذاكرة.

& vs *

المراجع مقابل المؤشّرات

المرجع (Type&) اسم مستعار لمتغيّر موجود لا يمكن أن يكون فارغًا ولا يُعاد ربطه، بينما المؤشّر (Type*) عنوان ذاكرة يمكن أن يكون nullptr ويُعاد توجيهه.

القوالب والدوال المتقدّمة

حاويات STL

std::vector

المصفوفة الديناميكية

std::vector مصفوفة ديناميكية تكبر تلقائيًا حسب الحاجة، وتُعد الحاوية الافتراضية والأكثر استخدامًا بـ C++ الحديثة.

std::string

النصوص القياسية

std::string نوع نصوص كامل يدير ذاكرته تلقائيًا، بعكس مصفوفات char الخام الموروثة من C التي تحتاج إدارة يدوية.

std::pair

الزوج المرتّب

std::pair يجمع قيمتين من نوعين مختلفين (أو متطابقين) بكائن واحد بسيط — أداة صغيرة لكن شائعة جدًا مع الخوارزميات والحاويات.

std::map

الخريطة المرتّبة

std::map حاوية مفتاح-قيمة تحافظ على ترتيب مفاتيحها تلقائيًا، مبنية داخليًا على شجرة متوازنة، بعمليات بحث وإدراج بسرعة O(log n).

std::unordered_map

الخريطة غير المرتّبة

std::unordered_map حاوية مفتاح-قيمة مبنية على جدول تجزئة (hash table)، بمتوسط سرعة O(1) للبحث والإدراج لكن بلا أي ترتيب مضمون للعناصر.

std::set

المجموعة الفريدة

std::set حاوية تخزّن عناصر فريدة فقط (بلا تكرار) وتحافظ على ترتيبها تلقائيًا — مثالية لفلترة التكرارات أو فحص الانتماء بسرعة.

std::array

المصفوفة الثابتة الحجم

std::array غلاف حديث وآمن حول مصفوفة C التقليدية ثابتة الحجم، بحجم يُحدَّد وقت الترجمة ولا يتغيّر أبدًا بعدها.

std::stack

المكدّس (LIFO)

std::stack حاوية مكيّفة (container adapter) تطبّق مبدأ LIFO — آخر عنصر يدخل هو أول عنصر يخرج، بواجهة push/pop/top فقط.

std::queue

الطابور (FIFO)

std::queue حاوية مكيّفة تطبّق مبدأ FIFO — أول عنصر يدخل هو أول عنصر يخرج، بواجهة push/pop/front/back فقط.

خوارزميات STL

iterator

المكرِّرات

iterator كائن يشبه المؤشّر يشير لعنصر داخل حاوية STL ويمكن تحريكه للتنقل بينها — الجسر الموحّد بين كل الحاويات وكل الخوارزميات.

std::sort

الترتيب

std::sort ترتّب عناصر أي نطاق (حاوية توفّر وصولًا عشوائيًا مثل vector أو array) تصاعديًا افتراضيًا، بمتوسط أداء ممتاز O(n log n).

std::find

البحث الخطّي

std::find تبحث عن أول عنصر يطابق قيمة معيّنة ضمن نطاق، بفحص خطّي (O(n)) يعمل مع أي نوع حاوية تقريبًا — حتى غير المرتّبة.

std::for_each

التطبيق على كل عنصر

std::for_each تطبّق دالة أو لامدا معيّنة على كل عنصر ضمن نطاق، معبّرة عن النية بوضوح أكثر من كتابة حلقة for يدوية.

std::transform

التحويل بين النطاقات

std::transform تطبّق دالة على كل عنصر بنطاق مصدر وتضع النتيجة بنطاق وجهة — يبني نطاقًا جديدًا من نطاق موجود بدل تعديله مباشرة.

std::accumulate

التجميع والاختزال

std::accumulate تختزل نطاقًا كاملًا لقيمة واحدة عبر دمج تراكمي — الاستخدام الافتراضي جمع كل العناصر، لكنها تقبل أي عملية دمج مخصّصة.

🎓 تريد التعلم بالترتيب بدل المرجع السريع؟ ابدأ من مسار CPP الكامل بالعربي.