
new עליה, אבל הבנאי שלה רץ כשיורש שלה נוצר.הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 29» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו ממשיכים בסדרה של הרצאות להסביר את ההרצאה של צעד 25 בנושא הבנאים, הבנאי, כל הבנאים. אז בהרצאה הזו אני רוצה לתת דוגמאות לבנאים מובנים בדוטנט.
אז אמרנו בסוף ההרצאה הקודמת שאפילו זו דוגמא לבנאי, אבל זה בנאי שלא מקבל פרמטרים. זה בנאי חסר פרמטרים, זה נקרא הבנאי הדיפולטיבי.
בנאי של ברירת המחדל באנגלית קוראים לזה הדיפולט קונסטרקטור הקונסטרקטור הדיפולטיבי דיפולט קונסטרקטור ההגדרה הכי פשוטה שלו זה קונסטרקטור שלא מקבל פרמטרים זה קונסטרקטור שגם אם לא נגדיר אותו הוא קיים עוד נראה עוד נבין בהמשך מה זה אומר אבל בואו נראה רגע לגבי הרייליסט אתם רואים כבר אני מרחף מעליו הוא אומר לי
פלוס שני אוברלואוד אז בוא נעשה קונטרול שיפט רווח אז יפה אז יש קונסטרקטור אחד ל-raylist אבל יש עוד שניים אחד מתוך שלוש יש עוד שניים אחד נוסף זה קונסטרקטור שמקבל אינטרפייס i-collection C אנחנו עוד לא יודעים בשלב זה מה זה אינטרפייס אז נניח לזה ויש אחד יחסית פשוט שאומר int capacity זאת אומרת ה-raylist כשאני מייצר
רייליסט חדש אני חושב שהוא מתחיל בגודל של 16 תאים זה בעצם בקרביים שלו זה מערך של תאים וברירת המחדל היא בגודל 16. כשאנחנו מוסיפים עוד ועוד ועוד פריטים לארניסט אז הוא מכפיל את הגודל שלו כל פעם שנגמר לו המקום.
אבל אני יכול מראש להגיד לו את הגודל שלו. למה שאני ארצה דבר כזה לעשות? כי כל פעם שהוא גדל ומכפיל את עצמו פי שתיים אנחנו צריכים לזרוק את המערך הישן, צריך לשכפל את המערך הישן ולזרוק אותו.
אז זו פעולה יחסית יקרה. אז אם אנחנו רוצים להימנע ממנה כי אנחנו יודעים בדיוק את הגודל או בערך את הגודל שאליו אנחנו מכוונים אז אני יכול להגיד לו אינט קפסיטי אז זה קונסטרקטור שמקבל פרמטר יפה אז אני יכול כשאני מפעיל את הקונסטרקטור אני יכול להגיד לו פה במקום 16 אני יכול להגיד לו אפילו
מספר קטן יותר או מספר גדול יותר אני מראש יודע שיש שם אלף תאים נעשה בילד בילד ובילד אנחנו נראה שאין שום בעיה עם זה ובזה דוגמן לקונסטרקטור שמקבל פרמטר בוא בואו נראה אם אפשר למצוא עוד קונסטרקטורים, הנה עוד קונסטרקטור זה פן, פן זה קונסטרקטור, וגם כאן בואו נראה אם יש לו עוד אוברלוט, יפה, הוא אומר שיש לו שלוש אוברלוט, זאת אומרת
לא רק קונסטרקטור אחד שמקבל את שני הפרמטרים אלא עוד שתי אפשרויות, עוד שלוש אפשרויות, קונטרול שיפט רווח, והוא אומר ששלוש מתוך ארבע. בואו ניגש, נראה רגע את אחד מתוך ארבע, הראשון זה קונסטרקטור שמקבל מסוג בראש את בראש, השני זה קונסטרקטור שמקבל מיסוי קלר את קלר, השלישי זה קונסטרקטור שמקבל גם בראש וגם עובי
והרביעי זה צבע ועובי שזה מה שאנחנו בחרנו, אנחנו בחרנו להשתמש בקונסטרקטור הזה. אנחנו עוד בהמשך נלמד על קונסטרקטור אוברלודינג, על העמסת קונסטרקטורים, זאת אומרת להגדיר כמה קונסטרקטורים כאשר הם נבדלים במספר הפרמטרים ו/או בסוגי הפרמטרים.
אוקיי, אבל זה בעצם עוד דוגמה לקונסטרקטור. בואו נראה אם יש לנו עוד דוגמאות. אז הנה שוב, פן, מים, פוינט. טוב, כרגע פה זה לא קונסטרקטור. מה עוד? הנה פוינט.
ניו פוינט, פוינט חדש. גם פה אני רואה שיש שלוש אוברלוט, זאת אומרת סך הכל ארבע קונסטרקטורים. הקונסטרקטור הראשון הוא דיפולט, הוא דיפולטיבי, הוא לא מקבל פרמטרים.
קונסטרקטור שני מקבל int dw, 32 ביט אינטג'ר, ספציפייט, קווידנטס, אוקיי, איכשהו בסיב מספר 1 הוא מתאר את הקואורדינטות.
אפשר לתת לו סייז, סייז זה גם כן איזה וויץ והייט, אז זה גם כן מתאים לx וy, אז הם גם מאפשרים את זה, וx וy שזה נחמד מאוד.
יפה, עכשיו, הקונסטרקטור הדיפולטיבי זה קונסטרקטור שלא מקבל פרמטרים, ברגע שאנחנו מגדירים ברגע שאצלנו שאנחנו מגדירים קונסטרקטור שמקבל פרמטר מסקרן אותי אם עדיין אני יכול להפעיל את הקונסטרקטור שלא מקבל את הדיפולטיבי בואו ניגש רגע לפה פה אני קורא לline אם אני אגיד לו בלי פרמטרים הוא ייתן
לי בוא נעשה f6 בוא נראה מה הוא אומר הוא אומר לא למה לא הוא אומר של line does not contain a constructed text 0 arguments גם פה אומר את זה line does not contain a constructed text 0 arguments הם לא משתמשים במונח default constructor בנאי ברירת מחדל הם משתמשים במונח הרבה יותר ברור הם אומרים אין כזה קונסטרקטור
שמקבל 0 ארגומנטים אוקיי שימו לב שאם ניגש לline ונבטל את הקונסטרקטור הזה ונעביר לו פה איזשהו ערך סתם חמש נקודה אפס אני באינסרט מוד נעשה קונטרול זד כן חמש נקודה אפס אני הייתי באינסרט הוא עדיין באינסרט אינסרט אמורים פה אני באינסרט אוברייט אינסרט עכשיו אני באינסרט אז אני אומר לו חמש הוא לא אה כי אני בנאמלוק חמש נקודה אפס יפה בוא נעשה עכשיו בילד ונראה אם זה אז הוא אומר לא מה בא עם זה הוא אומר
הסאם אינד וייד ארגמנט, בוא נראה מה הוא מצפה לקבל, קונטרול שיפט רווח, הוא מצפה לקבל פלוט, נגיד לו, אני חושב שאפשר להגיד לו פה בסוף F, F זה פלוט, קונטרול שיפט B ובילד סקסידד, 5.0 זה פשוט דאבל, אפשר גם 5.0, שוב קונטרול שיפט B, שמתם לב, אז הגדרנו קונסטרקטור שלא מקבל פרמטרים, בסדר, אז בגלל, תכף נדבר על זה, אבל אוקיי,
אז הגדרתי קונסטרקטור שלא מקבל פרמטרים ולכן אני יכול להפעיל את זה. אוקיי, נחזור רגע אחורה, נחזור רגע לכאן. אז עכשיו אני קורא לליין ואני כן רוצה להעביר פרמטר ופה אני אעשה undo, אני אחזיר את זה אחורה, אני כן אקבל פרמטר בליין, יפה, אני מקבל את הפרמטר, יפה. עכשיו, למה אני חייב לשים את זה?
שמתם לב שאם אני מסיר את זה ואני מנסה לקמפל בילד בילד הוא צורך ואומר בוא נראה מה הוא אומר הוא אומר שייפ דז נות קנטיאניק אינסטראקטידה טקסט אפס ארגומנטים הוא אומר ששייפ מה הקשר לשייפ מי הזכיר את שייפ שייפ לא מקבל אפס ארגומנטים מה אכפת לי משייפ למה הוא צועק לי על שייפ תשובה ליין בבטנו מכיל את שייפ כשאני מאתחל לין אני חייב גם לאתחל את שייפ שבתוך הלין.
אוקיי, אז רגע, אז אני חייב לאתחל אותו, אז אוקיי, אם אני חייב לאתחל אותו, אני חייב לאתחל אותו, אז לכן אני חייב לשים בייס וויט, אני חייב לאתחל אותו.
אבל בואו נלך רגע לשייט ונגיד לו שהוא לא מכיר אותו, אני לא רוצה לשנות את הקונסטרקטור הזה, הקונסטרקטור הזה משפיע גם על פריאנד ואני לא רוצה עכשיו להתחיל לעשות שינויים מסיביים בקוד אני אבל כן אצור פה עוד קונסטרקטור אינטרנל שלא לקבל פרמטרים ומצידי אפילו לא עושה כלום אבל העיקר הוא קיים ואז נלך לליין ואני רוצה
להגיד לו פה קונטרול שיפט רווח יש דרך להגיד קונטרול שיפט רווח דיספלי פרמטר זה יפה עכשיו הוא מראה לי שיש שני אוברלות אם אני מרחף מעל בייס בוא נרחף רגע מעל בייס יפה הוא מראה לי פלוס אחד אוברלורד יפה ואם אני עושה פה קליק ולוחץ פה על זה אז הוא מציג לי את שני הוא אומר לי שניים מתוך שניים בוא
נראה את הראשון הראשון הוא בלי פרמטרים זאת אומרת אני יכול להגיד לו גם בלי כי עכשיו הוספנו אותו נגיד לו בלי פרמטרים ונגיד לו בילד ובילד וזה בילד סקסידד יפה אז עכשיו רגע זוכרים את השגיאה שקיבלנו את הזנות זה שאפס ארגומנטים אז בואו נסיר את השורה של בייס בלי להתחל את בייס
בואו נראה עכשיו מה קורה, build succeeded. מקודם לא יכולנו לעשות את זה. מקודם ל-shape לא היה default קונסטרקטור, קונסטרקטור המקבל אפס ארגומנטים. ולכן לא ניתן היה לאתחל את line בלי לאתחל באופן מפורש את base, את shape, עם הפרמטר שהוא מחויב לקבל.
הוא היה חייב לקבל float. עכשיו, משהוספנו קונסטרקטור שלא מקבל ארגומנטים, פרמטרים אז אני לא חייב לעשות פה נקודותיים אני יכול גם בלי השורה הזו ולא רק זה גם בלי הפרמטר יפה אבל כל זה היה בשביל הדגמה אני כן אנחנו לא רוצים להגדיר קונסטרקטור שלא מקבל אין מצווה וזה כלל החיים אין מצווה שהקוד יתקמפל המצווה היא
שהקוד יתקמפל ושהמערכת תהיה ברזל זאת אומרת המערכת לא אמורה לבוא לקראתכם כדי שהקוד יתקמפל אתם צריכים לעשות הכל כדי שהמערכת תתקמפל אבל בלי להגיע לפינות.
זאת אומרת אם אתם רואים שהוא צועק אליכם נגיד שאתם שכחתם את השורה הזו ואתם מקמפלים ואתם רואים הוא צועק לא לא לא לא לא לא יכול אני חייב שתיתחלו לי גם את בייס אז אל תבואו ותגידו טוב אז הוא צריך אז נוסיף לו לא אם צריך אז מוסיפים אבל לא מוסיפים אם אפשר בלי ואפשר בלי ואין שום היגיון שזה כל הרעיון של שייפ זה שיש לו את המשותף המשותף החלטנו
שהוא לא ניתן לשינוי ולא ניתן לשינוי זה אומר שחייבים להתחיל אותו וזה הנכון אז אל תוסיפו עוד קונסטרקטור רק כדי שדברים יתקמפלו אל תבואו ותגידו לי רגע זה לא יתקמפל לי והוא אמר לי שייפ זה לא קונטיין לקונסטרקטור נותן 0 ארגונטים אז הוספתי לו מה פתאום תכתבו לו את מה שצריך מה מה צריך, נחזור אחורה, זה מה שצריך.
צריך להפעיל באופן מפורש את ה-Base Constructor, את הבנאי של מחלקת הבסיס של שייפ. יפה. אוקיי, אז ראינו גם דוגמאות לקונסטרקטורים.
אתם יכולים לראות הרבה מאוד דוגמאות לקונסטרקטורים. זאת אומרת, כל היום, מהיום הראשון למעשה שלמדנו תכנות, אנחנו כל הזמן למעשה יצרנו כל מיני דברים. בואו, אם אפשר למצוא בפרוגרם, יפה.
בפרוגרם כשבפעם הראשונה הפעלתם תוכנית שהייתה חלונאית אז עשיתם איפשהו בתוכנית היה דבר כזה New Form 1 שזה הטופס שלכם.
New Form 1 זה קונסטרקטור בואו נלך אליו אך בואי ממני וgo to definition כשאנחנו יוצרים טופס חדש אז הוויז'ואל סטודיו השף של הוויז'ואל סטודיו מייצר לנו קונסטרקטור עבורו זה קונסטרקטור הוא פאבליק אנחנו עוד נלמד על פאבליק בהמשך, אבל הנה, הוא קונסטרקטור. עכשיו, דרך אגב, מה מגדיר, מה השם של קונסטרקטור?
השם של קונסטרקטור הוא תמיד כשם המחלקה שבתוכה הוא נמצא. הבנאי של פורום אחד, חייבים לקרוא לו פורום אחד.
שימו לב שבנאי היא לא פונקציה כי הוא לא מחזיר שום דבר. פונקציה חייבת להחזיר משהו או להגיד באופן מפורש אני לא מחזירה.
הקונסטרקטור לא אומר מה הוא מחזיר ולא יכול שלא להחזיר ולא יכול להחזיר משהו אחר חוץ מאשר בקיצור הוא לא מחזיר אבל אפשר להגיד שהוא בעצם כאילו מחזיר לי פורום אחד נכון הקונסטרקטור בעצם כאילו מחזיר לי פורום אחד אבל האמת היא הוא לא מחזיר מי שמחזיר זה דווקא ניו ניו מקצה פורם אחד גוש זיכרון עבור פורם אחד ואז היא מפעילה את הקונסטרקטור
עבור הגוש שזה עתה הוקצה ואז ניו מחזירה את פורם אחד במקרה הזה אפליקיישן run מיד ניגשת לפורם אחד ועושה עליו כל מיני דברים בפורם אחד זה לא קונסטרקטור איך אני יודע שזה לא קונסטרקטור טוב האמת שאי אפשר לדעת אולי יש קלאס שנקרא initialized component וזה הקונסטרקטור אבל בדרך כלל אנשים לא יפעילו קונסטרקטור אם הם לא עושים new ומחזירים ערך. זאת אומרת
אם נסתכל רגע על פורם אחד בוא נגיד שמתוך כאן אני רוצה להפעיל את פורם אחד. פורם אחד, פורם אחד זה הקלאס ואם אני אגיד לו enter לפתח סוגריים הוא לא ייתן לי אבל אם אני אגיד לו new פורם אחד control shift רווח אז הוא כן נותן לי.
זאת אומרת הוא לא מוכן שאני סתם אכתוב פורם אחד לכן זה כנראה לא קונסטרקטור, אפשר גם כמובן לרחב מעליו ולראות שהוא void form1.initializedComponent זוהי פונקציה רגילה קונסטרקטור נראה כמו פונקציה אבל הוא לא כי הוא לא מחזיר ערך יפה בוא נראה אם אפשר לראות פה עוד
קונסטרקטורים עוד קונסטרקטורים אני בינתיים לא רואה, אה אני רואה פה קונסטרקטורי פה אנחנו מפעילים את הקונסטרקטור של freehand אבל זה די ברור מאליו ומה יש לנו בפונקציות פה לא וגם פה לא וגם פה לא אני לא רואה טוב אז זה היה דוגמאות וקצת דיון על קונסטרקטורים הייתי רוצה עכשיו אולי
סתם לכתוב איזושהי תוכנית קטנה בוא נפתח ויז'ואל סטודיו סתם תוכנית קטנה פייל ניו פרוג'קט סי שארפ ווינדוס קונסולה אפליקיישן ולהגיד לו אוקיי וסתם קצת לשחק עם קונסול אפליקיישן טוב אז בואו נעשה איזושהי דוגמא אז שימו לב גם פה וגם דרך אגב היא קלאס בפני עצמה אבל זה פחות
מעניין אותנו בואו נגדיר פה קלאס ונקרא לו מצידי קלאס x והוא ריק מתוכן מה אני כבר עכשיו יכול לעשות עם קלאס x אני יכול להגיד x גדול ולהגדיר את x1 זה אני כבר יכול לעשות F6 עובר קומפילציה, יפה מאוד.
אבל הוא כבר צועק, הוא אומר, The variable X1 is the variable that never used. הגדרת את X1, אבל מעולם לא השתמשת בו. הדבר הבא שאני יכול לעשות זה להגיד X1 שווה ל-new X.
פתח סוגריים, שימו לב שכבר יש לי קונסטרקטור עוד לפני שהגדרתי קונסטרקטור. זאת אומרת, זה קונסטרקטור דיפרוטיבי, זה קונסטרקטור של ברירת מחדל, שהקומפיילר, אפשר להגיד, הוא כותב לנו גם בלי שנכתוב.
מה הוא עושה? האמת, אני לא יודע. יכול מאוד להיות שהוא בעצם לא עושה כלום. יפה, אבל פה אני פותח וסוגר, ויפה, ויש לי x1, f6 ובילד סקסידד, וכבר הוא הפסיק לצעוק על x1 שהוא לא היה בשימוש.
יפה, אני יכול כמובן גם בשורה אחת להגיד שני הדברים האלה, נמחק את זה, ואז אני אומר לו שמסוג x יש לי את x1, ואני כבר מאחר אותו להקצה חדשה של x מהותחל יפה ונגיד לו f6 וזה עובר קומפילציה מצויינת.
אז יש לנו את x1 מה אני יכול לעשות עם x1? x1 נקודה אני עדיין לא יכול לעשות איתו שום דבר. ארבעת הפונקציות שיש לי פה אלה ארבעת הפונקציות שיש לי עבור כל אובייקט בדוטנט.
שימו לב שכל האובייקטים בדוטנט יש להם את הדבר הזה וזאת בגלל שאנחנו לא מודעים לזה אבל כולם יורשים את אובייקט יש מחלקה שנקראת אובייקט בואו רק נראה לכם את זה אם כבר אנחנו יודעים מה זה ירושה אני אגיד אובייקט o ואני אגיד o נקודה ואני אראה שיש לו את ארבעת אלה לאובייקט יש את ארבעת אלה וכשאני אומר בואו נמחק את זה וכשאני אומר קלאס x אני בעצם אומר יורש מי
אובייקט רוצה או לא רוצה אני בעצם אומר את זה אם אני אעשה אם אני אגיד go to definition אנחנו נראה שלobject יש את השדות שראינו מה יש לו יש לו שני equals get hash code get type את member clause אנחנו לא רואים כי הוא protected על זה עוד נלמד הוא לא זמין reference equals אנחנו לא רואים וto string אני חושב שאנחנו רואים את static אנחנו עוד נלמד על static אז אנחנו לא רואים
את מה ש static אבל אנחנו רואים את ה-equals הזה, את get hash code, את get type ואת ה-string, ארבעת אלו.
יפה. בואו נמחק את זה. יפה, וגם נמחק את זה. מה עוד אני יכול לעשות עם x? טוב, כרגע מה שאני רוצה לעשות זה להגדיר לו קונסטרקטור.
אז בואו נגדיר במחלקת x קונסטרקטור, אז נגיד x ת"ח סגור ת"ח סגור. זה הקונסטרקטור של x, בוא נעשה f6, אני עושה f6 ומה קרה? הוספתי את מה שהיה לי בחינם ונענשתי?
האמת שזה קורה כל הזמן, מי שנותן, מה ציפיתם? אבל לא משנה, זה היה איזשהו אנקדודה פילוסופית. טוב, בקיצור בואו נראה את ה...
בארווריסט ננעץ ונראה את השגיאה, זה אומר שpro זה שx נקודה x תחת גבול סוגריים כן הקונסטרקטור של x בתוך מחלקת פרוגרם בתוך console אפליקיישן אחד אנחנו כולנו כל הזמן בתוך console אפליקיישן אחד אומר פה is inaccessible due to its protection level לא ניתן לגשת אליו בגלל שהוא בגלל רמת ההגנה שלו אנחנו נלמד על רמת ההגנה בשיעורים הבאים אבל בשתי מילים אם אני לא כותב
שום דבר ליד שדה של מחלקה, אז מובן מאליו שזה לא נגיש מחוץ למחלקה. מחוץ למחלקה זה אומר שאם מישהו מבחוץ, כן, אנחנו עכשיו מחוץ, זה קוד שמתבצע מחוץ למחלקה.
זה המחלקה. פה אני מחוץ למחלקה, פה אני, פה אני, בכל המקומות האחרים אני מחוץ למחלקה. כשאני מחוץ למחלקה, אז אני לא יכול לגשת לקונסטרקטור אם את הקונסטרקטור הגדרתי בלי שום דבר לידו. בלי שום דבר לידו, תכף נראה מה אפשר לשים, אז הוא לא נגיש.
אני כן יכול לגשת אליו מתוך המחלקה. זאת אומרת, אם במחלקה אני אגדיר פונקציה f, כמובן שנגדיר אותה void f, וננסה מתוך הפונקציה לעשות new x, אז אין בעיה, זה זמין.
בואו נראה, פה הוא נותן לי, קונטרול שאיף תרווח הוא לא משלים אותי שימו לב שימו לב אני מוחק את זה אני אגיד ניו איקס נראה כאילו זה הולך לעבוד אני פותח הוא אומר לא הוא לא הוא לא משלים אותי הוא לא האינטליסנס לא מזהה יותר מזה הוא צועק פה על ניו מה הוא אומר הוא אומר הקונסטרקטור של איקס הוא לא זמין הוא לא נגיש בגלל רמת האבטחה או רמת ההרשאה רמת ההרשאה יפה אבל
מתוך המחלקה זו המחלקה מתוך המחלקה הוא כן זמין. אם את זה אני אנטרל, אנטרל, פה מנטרלים, ואני אנסה לקמפל בילד בילד, בילד תקסיד את זה בסדר.
מתוך המחלקה אני יכול להפעיל, מחוץ למחלקה אני לא יכול להפעיל. אוקיי. אז מה אני צריך לעשות כדי שזה יהיה זמין מחוץ למחלקה?
מה שאני צריך לעשות זה להגיד או public אפשרות אחת או internal אפשרות שנייה. ההבדל בין פאבליק לאינטרנל עוד נלמד בהזדמנות אבל שניהם מאפשרים גישה מחוץ למחלקה.
להשתמש באינטרנל הוא יותר מדויק. זאת אומרת הוא נותן לי גישה מפה אבל הוא לא יותר מדי, לא מעוד מקומות. רמת הגישה החופשית ביותר זה פאבליק. פאבליק זה אומר ציבורי, אינטרנל זה אומר פנימי.
אז למרות השם שלו פנימי עדיין זה אומר אינטרנל זה אומר שהוא זמין בכל הפרויקט שלנו אנחנו עוד בהמשך נלמד על פרויקט ועל פרויקטים אבל אינטרנל מאפשר לי בכל הפרויקט שלי גישה לשדה יפה אז הגדרנו קונסטרקטור עשינו אותו אינטרנל זה שהוא זמין לי עכשיו באינטרנל זה אומר שהוא זמין לי גם מחוץ למחלקה יפה אז זה אמור עכשיו לעבור אז נגיד לו עבור נמחק את זה ונגיד לו השלם זה משלים והנה
הוא משלים אותי או לפחות האינטליגנס מזהה אותי ונגיד לו ככה בואו ננסה לקמפל עכבר ימני ובילד ובילד סקסיד את מצוין יפה אז יש לי דיפולט קונסטרקטור שעשיתי בעצמי למה שאני ארצה דיפולט קונסטרקטור אם אני רוצה לעשות משהו אם אני אני רוצה שמשהו, שאיזשהו קוד יופעל כשאני מייצר
תקרית חדשה של המחלקה שלי. אז לדוגמה, אני יכול, נגיד שיש לי שדה int i, אני יכול לתת פה ל-i ערך.
טוב, אז אני יכול לתת ערך ל-i בקונסטרקטור, יפה, אבל זה עדיין קונסטרקטור שלא מקבל פרמטרים. אני יכול גם בקונסטרקטור עצמו, אני יכול להגדיר אותו כקונסטרקטור שכן מקבל.
בואו נגדיר אותו כקונסטרקטור שמקבל את int i1 ובמקום לתת לו סתם 5 ניתן לו את i1. אם עכשיו אני אנסה לקמפל את התוכנית אז הוא יגיד לי שאין קונסטרקטור שלא מקבל פרמטרים. הוא אומר לי שx does not contain a constructor that takes 0 argumentים לx אין קונסטרקטור שמקבל 0 argumentים.
כי את הקונסטרקטור שהיה לנו שמקבל 0 ארגומנטים שינינו לקונסטרקטור שמקבל ארגומנט אחד מסוג int. אבל אז פתאום אני נזכר ואומר רגע אבל לפני שהוספתי הרי את הקונסטרקטור המקורי הרי זה כן עבד הרי אם אני אסיר בכלל את הקונסטרקטור הזה ואני אסמן אותו n קונסטרקטור ואני אגיד לו build אז הכל עובר בשלום רק זה שהוא אמר לי i is never used הוא
לא עשה שום שינוי ב-i בסדר ננטרל את זה אבל שוב נגיד לו עכבר ימני ובילד אז הוא עובר בשלום אז עכשיו אני מבולבל ככה הכל בסדר, אני אומר לו new x אז הוא מקבל את זה, אני מפעיל קונסטרקטור ללא ארגומנטים
למרות שלא כתבתי פה קונסטרקטור ללא ארגומנטים זאת אומרת הקומפיילר מוסיף את הקונסטרקטור הזה בעצמו אז למה כשאני בא ואומר לו הנה קונסטרקטור שכן מקבל ארגומנטים ניתן לו גם את ה-i ואני אומר לו בילד