מדוע לרשום דבר כזה:

מדוע לרשום דבר כזה:

קוד:
class X{
        const int x;
        X{x=1);
        X{};
}

הרי המשתנה x הוא קבוע, ומאתחלים אותו ל-1 עם הקונסטרקטור הראשון ואז אסור לגעת. אין לקונסטרקטור השני השפעה על אותו קבוע?
 

BravoMan

Active member
באמת למה?

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

קוד:
 class X
{ 
 
public:
    const int x;  
         
    X()
    {
        x= 1;
    }
     
    X(int a, int b)
    {
        //empty//
    }
} 

ו

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

BravoMan

Active member
זה עדיין לא יתקמפל לך...

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