שאלה-מצביע למצביע ופונקציות וירטואליות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה-מצביע למצביע ופונקציות וירטואליות


guy81

Recommended Posts

שאלה 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 , בממשק הוסיפו וירטואל לכל הפונקציות, בעוד במימוש הויספו לדיסטקרטור בלבד. מדוע? ומה המשמעות של זה אם ככה(לפי מה תהיה ההחלטה בזמן ריצה?)

קישור לתוכן
שתף באתרים אחרים

כבר אמרתי לך עשרים פעם: שים את הקוד בתוך טג קוד!

א.

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

ב.

מה שנמחק אחרי היציאה מה-dtor הוא האובייקט עצמו (StairCaseImpl). בתוך האוביקט יושב מצביע בשם pedestrians, וכשהאובייקט StairCaseImpl נמחק, המצביע pedestrians נמחק - אבל לא הזכרון שאליו הוא מצביע. את הזכרון עצמו צריך למחוק באופן ידני, וזה מה שעושה ה-delete.

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...