לדלג לתוכן

1.9 - מודל מחלקות ופולימורפיזם - תרגול

תרגול - יעד כתיבה שניתן להחליף

הרחיבו את ממשק Sink מההרצאה עם CountingSink שסופר כמה bytes נכתבו אליו. הגדירו את המחלקה כך ש־write אינה שומרת string_view מעבר לקריאה.

כתבו פונקציה שמקבלת Sink& וכותבת שתי הודעות. הפעילו אותה על ConsoleSink, על MemorySink ועל CountingSink, בלי לשנות את גוף הפונקציה.

בעלות דרך בסיס

החזיקו CountingSink בתוך unique_ptr, והוסיפו לוג ב־destructor של הבסיס ושל הנגזר. הסבירו את סדר ההשמדה ואת תפקיד virtual. אין להסיר virtual ואז להריץ מחיקה פגומה כדי להוכיח את הצורך בו.

התאמת pointer

הריצו את דוגמת Both משני בסיסים והדפיסו את הכתובות. אל תניחו offset מספרי מסוים; הסבירו כיצד pointerים שונים יכולים להתייחס לתת־אובייקטים של אותו אובייקט שלם.

חלופה סגורה

הציעו מבנה באמצעות variant כאשר קיימים רק שני סוגי יעד קבועים. תארו מה צריך להשתנות בהוספת סוג שלישי והשוו להוספת מחלקה שיורשת Sink. אין צורך לממש ספריית type erasure בתרגיל הזה.