الانتقال إلى المحتوى الرئيسي
الوحدة 4 · الدرس 2 من 210/18 في الدورة~12 min
دروس الوحدة (2/2)

البنائين والمدمرين

المنشئون والمدمرون عبارة عن وظائف أعضاء خاصة تدير دورة حياة الكائنات: إنشائها (التهيئة) وتدميرها (تنظيف الموارد).

البنائين

يتم استدعاء المنشئ تلقائيًا عند إنشاء كائن من الفئة في الذاكرة.

  • له نفس الاسم للفئة.
  • لا يحتوي على نوع إرجاع (ولا حتى void).
  • يمكن تحميله بشكل زائد لقبول مجموعات مختلفة من المعلمات.
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

المنشئ الافتراضي

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

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

المدمرون

يتم استدعاء destructor تلقائيًا عندما يخرج الكائن عن النطاق أو تتم إزالته بشكل صريح من الذاكرة.

  • له نفس اسم الفئة المسبوقة بعلامة التلدة ~ (على سبيل المثال ~Item()).
  • لا يقبل المعلمات وليس له نوع إرجاع.
  • يتم استخدامه لتحرير الموارد (على سبيل المثال، إغلاق الملفات، وتحرير الذاكرة المخصصة ديناميكيًا).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

جربه بنفسك

تمرين#cpp.m4.l2.e1
المحاولات: 0جارٍ التحميل…

حدد فئة باسم المستخدم مع اسم مستخدم خاص لعضو std::string. أضف مُنشئًا عامًا يقبل سلسلة (User(std::string name)) ويستخدمها لتهيئة اسم المستخدم. أضف getUsername() getUsername() getter العام الذي يُرجع اسم المستخدم. بشكل رئيسي، قم بإنشاء كائن مستخدم بتمرير "Alice" كاسم، وطباعة اسم المستخدم الخاص به باستخدام std::cout.

جارٍ تحميل المحرر…
إظهار التلميح

يحمل المُنشئ نفس اسم الفئة ولا يحدد أي نوع إرجاع، ولا حتى "باطل".

الحل متاح بعد 3 من المحاولات

تمرين#cpp.m4.l2.e2
المحاولات: 0جارٍ التحميل…

قم بتعريف فئة تسمى Point مع عضوين صحيحين عموميين: x وy. أضف مُنشئًا افتراضيًا (بدون معلمات) يقوم بتهيئة x وy إلى 0. بشكل أساسي، قم بإنشاء كائن نقطة باستخدام المُنشئ الافتراضي واطبع x وy.

جارٍ تحميل المحرر…
إظهار التلميح

لا يأخذ المُنشئ الافتراضي أية وسائط: `Point() { x = 0; ص = 0; }`.

الحل متاح بعد 3 من المحاولات