Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أساسيات الـ Ctors والـ Dtors

جزء من قسم Object Oriented Programming في رحلة C++ على Coddy — الدرس 10 من 104.

المُنشئ (Constructor) هو دالة (method) خاصة تعمل تلقائيًا عند إنشاء كائن (object). أما الهادم (Destructor) فيعمل عند تدمير الكائن.

المُنشئ الافتراضي (Default constructor)

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
};

المُنشئ ذو المعاملات (Parameterized constructor)

Book(std::string title, int pages) {
    this->title = title;
    this->pages = pages;
}

زيادة تحميل المنشئ — منشئات متعددة

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
    
    Book(std::string title) {
        this->title = title;
        this->pages = 0;
    }
    
    Book(std::string title, int pages) {
        this->title = title;
        this->pages = pages;
    }
};

المُهدم (Destructor) — يتم تشغيله عند تدمير الكائن

class Book {
public:
    ~Book() {
        std::cout << "Book destroyed" << std::endl;
    }
};

إنشاء كائنات باستخدام منشئات مختلفة

Book book1;                        // المنشئ الافتراضي
Book book2("Harry Potter");         // معامل واحد
Book book3("1984", 328);            // معاملان

تمتلك المنشئات (Constructors) نفس اسم الفئة (class) بدون نوع إرجاع. تستخدم المدمرات (Destructors) ~ClassName() ويتم استدعاؤها تلقائيًا بترتيب عكسي لعملية الإنشاء عندما تخرج الكائنات عن النطاق.

challenge icon

التحدي

متوسط

قم بإنشاء فئة Product مع ثلاثة منشئات محملة بشكل زائد ومُهدم (destructor):

  • منشئ بـ 3 معاملات: name، price، stock
  • منشئ بمعاملين: name، price (stock = 0)
  • المنشئ الافتراضي: name = "Unknown"، price = 0، stock = 0
  • المُهدم: يطبع "Destroying: <name>"

جرّب بنفسك

#include <iostream>
#include "Product.h"

int main() {
    std::string name;
    int price, stock;
    std::getline(std::cin, name);
    std::cin >> price >> stock;
    
    Product product1(name, price, stock);
    Product product2("Keyboard", 79);
    Product product3;
    
    std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
    std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
    std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming