0Pricing
C++ Academy · درس

المنشئات وقوائم تهيئة الأعضاء

هيّئ الأعضاء بوضوح باستخدام قوائم تهيئة الأعضاء.

المنشئات وقوائم تهيئة الأعضاء درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما المُنشئ؟

المُنشئ أسلوب خاص يُنفَّذ عند إنشاء كائن. وله اسم الفئة نفسه ولا يملك نوع إرجاع.

class Point {
public:
    Point() {              // default constructor
        x_ = 0;
        y_ = 0;
    }
private:
    int x_, y_;
};

المُنشئات ذات المعاملات

يمكن أن تقبل المُنشئات معاملات، ويمكنك إنشاء عدة تحميلات زائدة منها.

class Point {
    int x_, y_;
public:
    Point() : x_(0), y_(0) {}
    Point(int x, int y) : x_(x), y_(y) {}
};

قوائم تهيئة الأعضاء

تُسمّى الصيغة : member(value) التي تسبق جسم الدالة قائمة تهيئة الأعضاء. تُهيَّأ الأعضاء هنا، ولا تُسنَد إليها القيم لاحقًا داخل جسم الدالة.

class Person {
    std::string name_;
    int age_;
public:
    Person(std::string n, int a) : name_(std::move(n)), age_(a) {}
};

لماذا نستخدم قوائم التهيئة؟

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

ترتيب التهيئة

تُهيَّأ الأعضاء بالترتيب الذي صُرّحت به داخل الصنف، وليس بالترتيب الموجود في قائمة التهيئة. طابِق الترتيب لتجنّب الالتباس.

المهيئات الافتراضية داخل الصنف (C++11)

يمكنكم إعطاء الأعضاء قيمًا افتراضية مباشرةً داخل جسم الصنف. يفيد ذلك عندما تشترك معظم البُناة في القيم الافتراضية نفسها.

class Buffer {
    size_t size_ = 0;
    char* data_ = nullptr;
public:
    Buffer() = default;
    Buffer(size_t n) : size_(n), data_(new char[n]) {}
};

= default و= delete

اطلبوا من المصرّف توفير عضو خاص أو حذفه:

class Widget {
public:
    Widget() = default;          // compiler-generated default
    Widget(const Widget&) = delete;  // disable copy
};

البُناة المفوَّضون (C++11)

يمكن لبانٍ أن يستدعي بانٍ آخر للصنف نفسه لمشاركة منطق التهيئة.

class Box {
    int w_, h_, d_;
public:
    Box(int w, int h, int d) : w_(w), h_(h), d_(d) {}
    Box() : Box(1, 1, 1) {}      // delegates to the 3-arg ctor
};

البُناة الصريحون

يمكن استخدام البُناة ذوي الوسيط الواحد في التحويلات الضمنية. ضعوا أمامهم explicit لمنع التحويلات غير المتوقعة.

class Vector {
public:
    explicit Vector(size_t n);
};
Vector v = 10;          // ERROR: explicit prevents this
Vector v(10);            // OK

المُدمِّرات

يُستدعى المُدمِّر ~ClassName() عند تدمير كائن. استخدموه لتحرير الموارد، مثل الملفات والمقابس والذاكرة الخام.

قاعدة الخمسة (لمحة سريعة)

إذا كتبتم أيًا من دوال العضو الخاصة، مثل المُدمِّر أو بانِي النسخ أو إسناد النسخ أو بانِي النقل أو إسناد النقل، ففكّروا في الدوال الخمس كلها. ستتناولون ذلك في دورة دلالات النقل.

تحقّق سريع

ما الذي يحدّد الترتيب الذي تُهيَّأ به أعضاء الصنف؟

مراجعة

استخدموا البُناة لضبط حالة الكائن. فضّلوا قوائم تهيئة الأعضاء على الإسناد داخل جسم الدالة. ضعوا explicit أمام البُناة ذوي الوسيط الواحد، واستخدموا = default و= delete للتعبير عن القصد.

الأسئلة الشائعة

هل درس «المنشئات وقوائم تهيئة الأعضاء» مجاني؟

نعم — نص درس «المنشئات وقوائم تهيئة الأعضاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «المنشئات وقوائم تهيئة الأعضاء»؟

هيّئ الأعضاء بوضوح باستخدام قوائم تهيئة الأعضاء. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «المنشئات وقوائم تهيئة الأعضاء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

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

جميع الدروس في هذه الدورة

  1. ‏struct مقابل class: متى تستخدم كلًّا منهما
  2. متغيرات الأعضاء والطرائق
  3. المنشئات وقوائم تهيئة الأعضاء
  4. مؤشر this والتغليف
← العودة إلى C++ Academy