Menu
Coddy logo textTech

בנאי ברירת מחדל

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 18 מתוך 104.

בנאי ברירת מחדל הוא בנאי שניתן לקרוא לו ללא ארגומנטים. הוא מאתחל אובייקט כשלא מסופקים ערכים התחלתיים. כל מחלקה זקוקה לדרך ליצור אובייקטים במצב ברירת מחדל תקין.

אם לא תגדירו שום בנאי, המהדר ייצור בנאי ברירת מחדל משתמע, שלא עושה דבר עבור טיפוסים פרימיטיביים וקורא לבנאי ברירת המחדל של אובייקטים שהם איברים.

class Player {
    int health;
    int score;
public:
    Player() {           // בנאי ברירת מחדל
        health = 100;
        score = 0;
    }
};

Player p1;               // קורא לבנאי ברירת המחדל
Player p2{};             // קורא גם לבנאי ברירת המחדל

ברגע שמגדירים בנאי כלשהו (כמו בנאי עם פרמטרים), המהדר כבר לא יוצר בנאי ברירת מחדל. אם עדיין צריך אותו, יש להגדיר אותו במפורש.

class Enemy {
    int damage;
public:
    Enemy(int d) : damage(d) {}  // בנאי עם פרמטרים בלבד
};

Enemy e1(10);    // עובד
Enemy e2;        // שגיאה! אין בנאי ברירת מחדל

ב־C++ מודרני, אפשר לבקש במפורש את בנאי ברירת המחדל שנוצר על ידי המהדר באמצעות = default:

class Item {
    int id;
public:
    Item() = default;           // המהדר יוצר בנאי ברירת מחדל
    Item(int i) : id(i) {}
};

בנאים כברירת מחדל חיוניים ליצירת מערכים של אובייקטים ולמחלקות שמשמשות במכולות כמו std::vector, שעשויות להזדקק לבניית איברים ללא ארגומנטים.

challenge icon

אתגר

קל

בואו נבנה מערכת מונה פשוטה שמדגימה כיצד בנאים ברירת מחדל מאתחלים אובייקטים למצב התחלתי תקין.

תיצור שני קבצים כדי לארגן את הקוד שלך:

  • Counter.h: הגדירו מחלקת Counter שעוקבת אחר ערך מונה. למחלקה שלך צריכים להיות:
    • מאפיין פרטי count (מספר שלם)
    • מאפיין פרטי name (מחרוזת) לזיהוי המונה
    • בנאי ברירת מחדל שמאתחל את count ל-0 ואת name ל-"Unnamed", ואז מדפיס "Counter created: <name>"
    • מתודה increment() שמגדילה את המונה ב-1
    • מתודה getCount() שמחזירה את ערך המונה הנוכחי
    • מתודה getName() שמחזירה את שם המונה
  • main.cpp: הדגם שבנאי ברירת המחדל עובדים כשיוצרים אובייקטים בדרכים שונות. קרא מספר מהקלט שמציין כמה פעמים להגדיל את המונה, ואז:
    • צור Counter באמצעות אתחול ישיר: Counter c1;
    • צור Counter נוסף באמצעות אתחול בסוגריים מסולסלים: Counter c2{};
    • הגדל את c1 את מספר הפעמים שצוין בקלט
    • הדפס "<name>: <count>" עבור c1
    • הדפס "<name>: <count>" עבור c2

שני המונים צריכים להתחיל ב-0 הודות לבנאי ברירת המחדל שלך, אבל רק c1 יוגדל. כך ניתן לראות כיצד בנאי ברירת מחדל מבטיחים שכל אובייקט יתחיל במצב צפוי ותקין, בלי קשר לאופן שבו הוא נוצר.

כלול את קובץ הכותרת שלך ב-main.cpp באמצעות #include "Counter.h".

נסו בעצמכם

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

using namespace std;

int main() {
    // קראו את מספר הפעמים שיש להגדיל את המונה
    int n;
    cin >> n;

    // TODO: צרו Counter באמצעות אתחול ישיר: Counter c1;

    // TODO: צרו Counter נוסף באמצעות אתחול עם סוגריים מסולסלים: Counter c2{};

    // TODO: הגדילו את c1 מספר פעמים בהתאם לערך של n

    // TODO: הדפיסו "<name>: <count>" עבור c1

    // TODO: הדפיסו "<name>: <count>" עבור c2

    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C++ אונליין