דילוג לתוכן המרכזי
מודול 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;
    }
};

הורסים

הרס נקרא אוטומטית כאשר האובייקט יוצא מהטווח או מוסר במפורש מהזיכרון.

  • יש לו שם זהה לזה של המחלקה שלפניה טילדה ~ (למשל ~Item()).
  • הוא אינו מקבל פרמטרים ואין לו סוג החזרה.
  • הוא משמש לשחרור משאבים (למשל, סגירת קבצים, שחרור זיכרון שהוקצה באופן דינמי).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

נסה זאת בעצמך

פעילות גופנית#cpp.m4.l2.e1
ניסיונות: 0טוען...

הגדר מחלקה בשם User עם חבר פרטי std::string שם משתמש. הוסף בנאי ציבורי שמקבל מחרוזת (User(std::string name)) ומשתמש בה כדי לאתחל שם משתמש. הוסף getter public std::string getUsername() שמחזיר שם משתמש. ב-main, צור אובייקט User המעביר את 'Alice' כשם, והדפיס את שם המשתמש שלו באמצעות std::cout.

טוען עורך...
הצג רמז

לבנאי יש אותו שם כמו המחלקה ואינו מציין שום סוג החזרה, אפילו לא `void`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#cpp.m4.l2.e2
ניסיונות: 0טוען...

הגדר מחלקה בשם Point עם שני איברים שלמים ציבוריים: x ו-y. הוסף בנאי ברירת מחדל (ללא פרמטרים) המאתחל את x ו-y ל-0. ב-main, צור אובייקט Point באמצעות בנאי ברירת המחדל והדפיס את x ו-y.

טוען עורך...
הצג רמז

בנאי ברירת המחדל אינו לוקח ארגומנטים: `Point() { x = 0; y = 0; }`.

הפתרון זמין לאחר 3 ניסיונות