פורסם 2010 בינואר 515 שנים היי יש לי מחלקה מסויימת ואני צריך להוסיף למחלקה שיטה בונה מעתיקה. משום מה מה שאני עושה הוא לא נכון...[pre]public class Point{ private int x ; private int y ; public Point(int x , int y){ this.x = x; this.y = y; } public int getX(){ return this.x; } public int getY(){ return this.y; } public void setX(int x){ this.x = x; } public void setY(int y){ this.y = y; } public String toString(){ return ("<"+this.x+">" +","+ "<"+this.y+">"); }[/pre]זאת המחלקה ואני מנסה להוסיף את השיטה בונה הזאת, אבל היא לא נכונה , מה הטעות ?![pre]public Point (){ Point copyPoint = new Point (this.point); return copyPoint; }[/pre]תודה לעוזרים ... ד"א הוא עושה לי קו אדום מתחת ל this.point
פורסם 2010 בינואר 515 שנים קודם כל, מומלץ שתכתוב באיזו שפה אתה כותב (למרות שזה לא כזה עקרוני לשאלה הספציפית הזו), וחוץ מזה, את הקוד שלך שים בטג קוד (כפתור # ליד הכפתור של הציטוט), במקום להצמיד לשמאל.בנאי מעתיק (או בשמו הלועזי Copy Constructor) הוא בנאי שמקבל כפרמטר אובייקט מאותו טיפוס. כלומר, אם יש לך קלאס בשם Point, אז הבנאי המעתיק צריך להיות פונקציה כזו:public Point(Point other) { // copy the members of "other" to "this"}יש?חוץ מזה, למה שהוא יידע מה זה this.point? לא הגדרת ל-Point שום איבר שקוראים לו ככה.
פורסם 2010 בינואר 515 שנים פעם הבאה פשוט תציין את השגיאה שהוא נותן לך.בכל מקרה, לפחות אחת מהבעיות שלך היא העובדה ש-THIS הינו POINTER למחלקה עצמה, כלומר, חייבים לגשת אל המשתנים שלו בחץ->ולא נקודה.this->תגיד אם יש לך עוד בעיות.
פורסם 2010 בינואר 515 שנים מחבר אוקיי.תודה בינתייםעריכה:לא עובד לי פה משהו ...[pre]public Point (Point point){ Point copyPoint = new Point (point); return copyPoint; }[/pre]שיניתי לזה אבל יש לו בעיות עם ה return
פורסם 2010 בינואר 515 שנים בנאי לא מחזיר ערך.חוץ מזה, הביטוי הבא:new Point(point);אומר לקרוא לבנאי של Point שמקבל פרמטר מטיפוס Point. אבל זה אותה הפונקציה שאתה כרגע נמצא בתוכה, מה שיגרום לרקורסיה אינסופית.תזכור שהבנאי הזה הוא בנאי לכל דבר. הוא צריך להתנהג כמו הבנאי הרגיל.ושוב:מומלץ שתכתוב באיזו שפה אתה כותב (למרות שזה לא כזה עקרוני לשאלה הספציפית הזו)' date=' וחוץ מזה, את הקוד שלך שים בטג קוד (כפתור # ליד הכפתור של הציטוט), במקום להצמיד לשמאל.[/quote']
פורסם 2010 בינואר 515 שנים מחבר אוקיי, אז הבנאי הוא בעצם זה : public Point (Point point){ Point copyPoint = new Point (point);אז איך אני משתמש בהעתק של העצם שבניתי ?!
פורסם 2010 בינואר 515 שנים שוב:הביטוי הבא:new Point(point);אומר לקרוא לבנאי של Point שמקבל פרמטר מטיפוס Point. אבל זה אותה הפונקציה שאתה כרגע נמצא בתוכה' date=' מה שיגרום לרקורסיה אינסופית.[/quote']כמו שהבנאי הרגיל שלך שם ערכים ב-x וב-y, זה גם מה שהבנאי המעתיק צריך לעשות.
פורסם 2010 בינואר 515 שנים מחבר בתוכנית יש את הפקודות הבאות :Point p1 = new Point (4,9);Point p3 = new Point (p1); עכשיו כשאני מריץ את התוכנית הוא רושם לי על הבנאי שיצרתי :the local variable copyPoint is never readאיך אני כותה את זה לעזאזל ?!
פורסם 2010 בינואר 515 שנים אז אני מבין שהחלטת לחלוטין להתעלם ממה שאמרתי לך קודם. אני חוזר ואומר:כמו שהבנאי הרגיל שלך שם ערכים ב-x וב-y, זה גם מה שהבנאי המעתיק צריך לעשות.
פורסם 2010 בינואר 515 שנים מחבר ככה ?[pre] public Point (Point point){ this.x = point.x; this.y = point.y; }[/pre]טוב אני חייב שתסביר לי בבקשה את העיניין כי כנראה שאני לא מבין אותו מההסבר של הספר , מה זה ?[pre]public Date(Date date){ this.day = date.day; this.month = date.month; this.year = date.year; }[/pre]ומה זה ?[pre]public Date getBirthday(){ Date copyBirthday = new Date(this.birthday); return copyBirthday; }[/pre]תודה רבה על הכל
פורסם 2010 בינואר 515 שנים כן, בדיוק ככה.ולגבי ה-Date, שים לב להבדל בין שתי הפונקציות:הראשונה היא בנאי - השם שלה הוא השם של המחלקה, ואין לה ערך החזרה בכלל (גם לא void). זו למעשה בדיוק דוגמה לבנאי מעתיק, כי היא מקבלת פרמטר אחד מהטיפוס שלה.הפונקציה השנייה היא פונקציה רגילה לחלוטין - יש לה שם, והיא מחזירה אובייקט מטיפוס Date. הקוד עצמו משתמש בבנאי המעתיק בשביל להחזיר עותק של האובייקט הנוכחי (אם נעשה סתם return this זה זה לא יהיה טוב - האובייקט שיוחזר יהיה בדיוק האובייקט הנוכחי, ולא עותק שלו).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.