guy81 פורסם 2012 בפברואר 29 Share פורסם 2012 בפברואר 29 שאלה 2 פה:http://www.cs.bgu.ac.il/~spl121/wiki.files/11-a.pdf פתרון :http://www.cs.bgu.ac.il/~spl121/wiki.files/11-a-solution.pdf ביקשו להמיר ל- c ובאחד השדות כתבו: Pedestrian **_pedestriansאני מניח שהכוונה היא מצביע למערך שכל אחד בו הוא מסוג מצביע להולך רגל.אבל איך זה מובן מהסינקט פה?(אולי חסר סוגרים מרובעות?)שאלה שניה: מדוע במימוש ב- c כתבו בדיסטרקטור:virtual ~StairCaseImpl(){ delete[] _pedestrians; }לפי מה שלמדנו, בדיסטקרטור כותבים כל מיני פעולות שרוצים לבצע לפני המחיקה. ואחרי היציאה מהדיס' מתבצעת המחיקה, אז למה כאן המחיקה בפנים?שאלה שלישית: כאשר כתבו את הממשק והמימוש ב- cpp , בממשק הוסיפו וירטואל לכל הפונקציות, בעוד במימוש הויספו לדיסטקרטור בלבד. מדוע? ומה המשמעות של זה אם ככה(לפי מה תהיה ההחלטה בזמן ריצה?) קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 בפברואר 29 Share פורסם 2012 בפברואר 29 כבר אמרתי לך עשרים פעם: שים את הקוד בתוך טג קוד!א. מערך זה פשוט רצף של אובייקטים שיושב בזכרון. כשיש לך מערך a, אז a הוא למעשה שקול למצביע לאיבר הראשון במערך הזה, וכשיש לך מצביע אז יכול להיות שהוא מצביע לאובייקט אחד ספציפי, או למערך של אובייקטים (למעשה מהבחינה הזו, אובייקט אחד הוא כמו מערך בגודל 1). אין דרך להבין את זה מתוך הסינטקס - אתה צריך להבין את זה מתוך הקוד עצמו (או מתוך ההערות). ב.מה שנמחק אחרי היציאה מה-dtor הוא האובייקט עצמו (StairCaseImpl). בתוך האוביקט יושב מצביע בשם pedestrians, וכשהאובייקט StairCaseImpl נמחק, המצביע pedestrians נמחק - אבל לא הזכרון שאליו הוא מצביע. את הזכרון עצמו צריך למחוק באופן ידני, וזה מה שעושה ה-delete.ג. זה לא משנה, אם במחלקת האבא הפונקציה מוגדרת כ-virtual אז גם אצל הבנים היא מוגדרת כ-virtual, גם אם לא מופיעה אצלם המילה. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.