كيف تصبح مطور C++: نصائح وسيرة ذاتية للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تجتاز مقابلة C++: أهم الأسئلة من الألف إلى الياء



المقابلة لوظيفة مطور C++ هي اختبار ليس فقط لمعرفة بناء الجملة، ولكن أيضًا للفهم العميق لكيفية عمل المترجم، وإدارة الذاكرة، وميزات البرمجة الشيئية. في هذه المقالة، قمنا بتفصيل أهم الأسئلة من الألف إلى الياء التي تُطرح غالبًا في المقابلات. ستكون المادة مفيدة لكل من المطورين المبتدئين وأولئك الذين يستعدون للمستوى المتوسط.



1. أساسيات بناء الجملة وأنواع البيانات



لنبدأ بالأساسيات — الأسئلة التي تختبر فهمك للمفاهيم الأساسية في لغة C++.



1.1. ما الفرق بين المرجع والمؤشر؟

هذا سؤال كلاسيكي. الاختلافات الرئيسية هي:

  • المرجع لا يمكن أن يكون nullptr، بينما المؤشر يمكن.
  • المرجع لا يمكن إعادة ربطه بكائن آخر بعد التهيئة.
  • المؤشرات تدعم العمليات الحسابية، بينما المراجع لا تدعمها.


int a = 5;int& ref = a;  // referenceint* ptr = &a; // pointer

ref = 10; // a = 10*ptr = 20; // a = 20


1.2. ما هو const وكيفية استخدامه بشكل صحيح؟

const في لغة C++ يُستخدم لحماية البيانات من التعديل. من المهم التمييز بين const قبل النوع وبعده:

  • const int* ptr — مؤشر إلى عدد صحيح ثابت (لا يمكن تغيير القيمة في العنوان).
  • int* const ptr — مؤشر ثابت إلى عدد صحيح (لا يمكن تغيير العنوان).


2. البرمجة الشيئية (OOP)



أسئلة البرمجة الشيئية هي جزء إلزامي من مقابلة C++. دعنا نفصل المواضيع الرئيسية.



2.1. الدوال الافتراضية وتعدد الأشكال

الدوال الافتراضية توفر الربط المتأخر (تعدد الأشكال الديناميكي). مثال:



class Base {public:    virtual void show() { std::cout << "Base"; }    virtual ~Base() = default;};

class Derived : public Base {public: void show() override { std::cout << "Derived"; }};

int main() { Base* b = new Derived(); b->show(); // Prints "Derived" delete b;}


من المهم تذكر المُدمّر الافتراضي — بدونه، عند حذف كائن من خلال مؤشر الفئة الأساسية، سيتم استدعاء مُدمّر الفئة الأساسية فقط، مما يؤدي إلى تسرب للذاكرة.



2.2. الدوال الافتراضية البحتة والفئات المجردة

الفئة التي تحتوي على دالة افتراضية بحتة واحدة على الأقل (= 0) تصبح مجردة. لا يمكنك إنشاء مثيل من هذه الفئة — فقط فئة مشتقة تقوم بتنفيذ جميع الدوال الافتراضية البحتة.



2.3. ما هما vtable و vptr؟

لتنفيذ تعدد الأشكال، يقوم المترجم بإنشاء جدول افتراضي (vtable) لكل فئة تحتوي على دوال افتراضية. يحتوي كل كائن على مؤشر مخفي (vptr) إلى هذا الجدول. يتم استدعاء الدالة الافتراضية من خلال الوصول غير المباشر عبر vptr، مما يضيف عبئًا صغيرًا.



3. إدارة الذاكرة والمؤشرات الذكية



لغة C++ تمنح المطور السيطرة الكاملة على الذاكرة، مما يتطلب عناية خاصة.



3.1. الفرق بين new/delete و malloc/free

  • malloc تخصص الذاكرة ولكنها لا تستدعي المُنشئ. free تحرر الذاكرة دون استدعاء المُدمّر.
  • new تخصص الذاكرة وتستدعي المُنشئ. delete تستدعي المُدمّر وتحرر الذاكرة.


3.2. المؤشرات الذكية: unique_ptr, shared_ptr, weak_ptr

المؤشرات الذكية تدير عمر الكائن تلقائيًا. النقاط الرئيسية:

  • std::unique_ptr — ملكية حصرية، لا يمكن نسخه، فقط نقله.
  • std::shared_ptr — ملكية مشتركة عبر عداد مرجعي.
  • std::weak_ptr — لا يزيد عداد المرجعي، و

المدونات

توصيات الكتب