C++
قوة C مع البرمجة كائنية التوجه والمكتبة القياسية
لغة الجامعات والمسابقات البرمجية: المتغيرات والحلقات والدوال، المؤشرات والمراجع، الأصناف والوراثة، ثم STL: الحاويات vector وmap والخوارزميات.
- عدد الدروس: 42
- عدد الفصول: 7
- بالعربية والإنجليزية
تقدّمك
محتوى التوثيق
الدروس مرتّبة من الأساس إلى المتقدّم. اقرأها بالترتيب أو اقفز إلى ما تحتاجه.
الفصل 1
البداية
- 1مقدمة إلى لغة C++تعرّف على لغة C++: ما هي، ومن أين جاءت، وأين تُستخدم اليوم، ولماذا تُعدّ من أفضل اللغات لطلاب علوم الحاسوب والهندسة.
- 2البدء مع C++: التثبيت والإعدادجهّز بيئتك: ثبّت المترجم g++، واختر بيئة تطوير مناسبة، واكتب برنامجك الأول في الملف main.cpp، ثم ترجمه وشغّله من الطرفية.
- 3قواعد الكتابة في C++تعرّف على البنية التي يقوم عليها كل برنامج C++: سطر #include، وفضاء الأسماء std، والدالة main()، والتعليمات والفاصلة المنقوطة.
- 4الإخراج وطباعة النصوصاطبع النصوص والأعداد باستخدام cout والعامل <<، وابدأ سطرًا جديدًا بـ \n أو endl، وتعرّف على الفرق بينهما وعلى رموز الهروب.
- 5التعليقاتاستخدم التعليقات لشرح الكود وجعله أسهل قراءة، أو لإيقاف جزء منه مؤقتًا أثناء الاختبار. تعرّف على // و/* */ ومتى تستخدم كلًا منهما.
الفصل 2
الأساسيات
- 6المتغيراتخزّن البيانات في المتغيرات: عرّفها وأسند إليها القيم وغيّرها واطبعها، وتعرّف على قواعد التسمية والثوابت const والكلمة auto.
- 7أنواع البياناتتعرّف على أنواع البيانات الأساسية في C++ وأحجامها ومداها، وعلى العامل sizeof، والحروف وأكوادها، وتحويل الأنواع وفخ القسمة الصحيحة.
- 8إدخال المستخدماقرأ الأعداد والكلمات من لوحة المفاتيح باستخدام cin والعامل >>، واقرأ الأسطر الكاملة باستخدام getline()، وتجنّب الفخ الشهير عند الجمع بينهما.
- 9العواملنفّذ العمليات على المتغيرات والقيم باستخدام العوامل الحسابية وعوامل الإسناد والمقارنة والعوامل المنطقية، وتعرّف على الزيادة والنقصان وأولوية العوامل.
- 10النصوص (string)تعامل مع النصوص باستخدام النوع string: ادمجها، واحسب طولها، واقرأ حروفها وغيّرها، واستخدم دوالها المفيدة مثل substr() وfind() وreplace()، وحوّل بين النصوص والأعداد.
- 11الرياضياتاستخدم max() وmin() ودوال المكتبة <cmath> مثل sqrt() وpow() وround() وceil() وfloor()، ونسّق الأعداد العشرية بالمكتبة <iomanip>.
- 12القيم المنطقيةتعرّف على النوع bool وقيمتيه true وfalse، واطبعهما بالكلمات باستخدام boolalpha، واستخدم التعابير المنطقية لاتخاذ القرارات.
الفصل 3
التحكم في التدفق
- 13الشروط: if...elseاجعل برنامجك يتخذ القرارات باستخدام if وelse وelse if، وتعرّف على الشروط المتداخلة والعامل الثلاثي ?:، وكيف تتحقق من صحة الإدخال.
- 14التعليمة switchاختر كتلة كود واحدة من بين حالات كثيرة باستخدام switch وcase وbreak وdefault، وافهم السقوط المتتالي (Fall-through) ومتى تفضّل switch على if.
- 15الحلقة whileكرّر الكود ما دام الشرط صحيحًا باستخدام while، ونفّذه مرة واحدة على الأقل باستخدام do...while، واقرأ مدخلات غير معروفة العدد وتحقّق من صحتها.
- 16الحلقة forعندما تعرف عدد مرات التكرار استخدم الحلقة for. تعرّف على أجزائها الثلاثة، والحلقات المتداخلة، وحلقة for المعتمدة على النطاق التي تمرّ على كل عنصر مباشرة.
- 17التحكم في الحلقات: break وcontinueاخرج من الحلقة مبكرًا باستخدام break، وتخطَّ دورة واحدة باستخدام continue، وتعرّف على سلوكهما في حلقات while والحلقات المتداخلة.
الفصل 4
المصفوفات والذاكرة
- 18المصفوفاتخزّن عدة قيم من النوع نفسه في متغير واحد: أنشئ المصفوفات، واقرأ عناصرها وغيّرها بالفهارس، ومرّ عليها بالحلقات، واحسب عدد عناصرها.
- 19المصفوفات متعددة الأبعادخزّن البيانات على شكل جدول من صفوف وأعمدة باستخدام المصفوفات ثنائية الأبعاد: عرّفها، واقرأ عناصرها وغيّرها، ومرّ عليها بالحلقات المتداخلة.
- 20المراجع (References)المرجع اسم ثانٍ لمتغير موجود. تعرّف على تعريف المراجع بالرمز &، والفرق بينها وبين النسخ، واستخدامها في الحلقات، والمراجع الثابتة const &.
- 21المؤشراتالمؤشر متغير يخزّن عنوان متغير آخر في الذاكرة. تعلّم كيف تعرّف المؤشرات، وتصل إلى القيمة عبرها بالرمز *، وتستخدم nullptr، وتتعامل مع المصفوفات بالمؤشرات.
- 22الذاكرة الديناميكية: new وdeleteاحجز الذاكرة أثناء تشغيل البرنامج باستخدام new وحرّرها باستخدام delete وdelete[]، وتعرّف على المكدس والكومة، وعلى تسرّب الذاكرة والمؤشرات المعلّقة، ولماذا تفضّل C++ الحديثة المؤشرات الذكية وvector.
الفصل 5
الدوال
- 23الدوالأنشئ دوالك الخاصة واستدعِها، وأرجع منها القيم باستخدام return، وافهم الفرق بين تصريح الدالة وتعريفها، ونطاق المتغيرات المحلية والعامة.
- 24معاملات الدوالمرّر البيانات إلى الدوال عبر المعاملات، وافهم الفرق الجوهري بين التمرير بالقيمة والتمرير بالمرجع والمرجع الثابت const &، وكيف تمرّر المصفوفات إلى الدوال.
- 25القيم الافتراضية للمعاملاتأعطِ معاملات الدالة قيمًا افتراضية تُستخدم عندما لا يمرّر المستدعي قيمة، وتعرّف على قواعدها: تبدأ من اليمين، وتُكتب في التصريح مرة واحدة.
- 26التحميل الزائد للدوالعرّف عدة دوال بالاسم نفسه ما دامت معاملاتها مختلفة في العدد أو النوع، وتعرّف على كيفية اختيار المترجم للدالة المناسبة، وحالات الغموض، ولماذا لا يكفي نوع القيمة المرجعة وحده.
- 27الاستدعاء الذاتي (Recursion)اجعل الدالة تستدعي نفسها لحل المشكلات الكبيرة بتقسيمها إلى مشكلات أصغر من النوع نفسه. تعرّف على حالة التوقف، وأمثلة المضروب وفيبوناتشي والنصوص، ومتى تفضّل الحلقات.
الفصل 6
البرمجة كائنية التوجه
- 28الأصناف والكائناتتعرّف على البرمجة كائنية التوجه، وأنشئ أصنافًا لها خصائص ودوال، وكائنات منها، واستخدم العامل . للوصول إلى الأعضاء، و:: لتعريف الدوال خارج الصنف، و-> مع المؤشرات.
- 29المُنشئات والهادماتهيّئ الكائنات تلقائيًا عند إنشائها باستخدام المُنشئ (Constructor)، واستخدم قائمة التهيئة والتحميل الزائد للمُنشئات، وتعرّف على الهادم (Destructor) ودورة حياة الكائن وفكرة RAII.
- 30محددات الوصول والتغليفتحكّم في الوصول إلى أعضاء الصنف باستخدام public وprivate وprotected، وطبّق التغليف (Encapsulation) بإخفاء البيانات وإتاحة دوال get وset تتحقق من صحة القيم، واستخدم الدوال الثابتة const.
- 31الوراثةأنشئ أصنافًا جديدة ترث خصائص صنف موجود ودواله باستخدام :، واستخدم protected، واستدعِ مُنشئ الصنف الأب، وتعرّف على الوراثة متعددة المستويات وإعادة تعريف الدوال.
- 32تعدد الأشكال (Polymorphism)اجعل الاستدعاء نفسه يتصرف بطرق مختلفة بحسب نوع الكائن الحقيقي، باستخدام الدوال الافتراضية virtual والكلمة override، وأنشئ أصنافًا مجردة بدوال افتراضية خالصة، وتعرّف على أهمية الهادم الافتراضي.
- 33التحميل الزائد للعواملامنح العوامل مثل + و== و<< معنى لأصنافك الخاصة، لتكتب p1 + p2 وcout << p بشكل طبيعي، وتعرّف على القواعد وأفضل الممارسات.
الفصل 7
مكتبة STL والمزيد
- 34المتجهات (vector)استخدم vector، المصفوفة الذكية التي يتغير حجمها تلقائيًا: أنشئها، وأضف العناصر واحذفها، واقرأها وغيّرها، ومرّ عليها، ومرّرها إلى الدوال، وأنشئ متجهات ثنائية الأبعاد.
- 35الخرائط (map وunordered_map)خزّن البيانات على شكل أزواج من مفتاح وقيمة باستخدام map المرتبة وunordered_map السريعة: أضف العناصر واقرأها وغيّرها، وتحقق من وجود مفتاح، واحذف، ومرّ على العناصر.
- 36المجموعات (set)خزّن قيمًا فريدة مرتبة تلقائيًا باستخدام set: أضف وابحث واحذف، ورتّب تنازليًا، واحذف التكرار من المتجهات، وتعرّف على unordered_set وmultiset.
- 37المكررات والخوارزمياتتنقّل بين عناصر الحاويات باستخدام المكررات (Iterators)، واستخدم خوارزميات STL الجاهزة مثل sort() وfind() وcount() وaccumulate()، واكتب شروطك الخاصة بتعبيرات لامدا (Lambda).
- 38القوالب (Templates)اكتب كودًا عامًا يعمل مع أي نوع باستخدام القوالب (Templates): قوالب الدوال، وقوالب الأصناف، وكيف يستنتج المترجم الأنواع، ولماذا تقوم مكتبة STL كلها على القوالب.
- 39الاستثناءات (try وcatch وthrow)تعامل مع الأخطاء أثناء التشغيل باستخدام try وthrow وcatch، واستخدم أصناف الاستثناءات القياسية مثل runtime_error وinvalid_argument وout_of_range، والتقطها بالمرجع الثابت.
- 40التعامل مع الملفات (fstream)اكتب البيانات في الملفات واقرأها منها باستخدام المكتبة <fstream>: الأصناف ofstream وifstream وfstream، وأوضاع الفتح مثل الإضافة ios::app، والقراءة سطرًا سطرًا أو قيمة قيمة.
- 41المؤشرات الذكيةدع C++ تدير الذاكرة الديناميكية عنك: استخدم unique_ptr للملكية الحصرية وshared_ptr للملكية المشتركة، وأنشئها بـ make_unique وmake_shared، وانقل الملكية بـ move، وتعرّف على weak_ptr.
- 42الخطوات التاليةراجع ما تعلّمته في مشروع صغير يجمع الهياكل (struct) والمتجهات والخرائط والخوارزميات، ثم اكتشف الطريق بعد ذلك: هياكل البيانات والخوارزميات، والمسابقات البرمجية، وC++ الحديثة، وأدوات المحترفين.