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

Date::Date(int d, int m, int y)
{
 day = d;
 month = m;
 year = y;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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

Date::Date(int d, int m, int y):
  day(d),month(m),year(y)
{
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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

class Date {
public:
 int day;
 int month;
 int year;
 Date(int d, int m, int y):day(d),month(m),
  year(y) {}
 long GetJulian();
 void AddDays(int days);
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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

Date a(7,13,1956);
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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