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

تدرّب بنفسك: مترجم C++ عبر الإنترنت