פורסם 2011 באפריל 2814 שנים על טיפוסים(מחלקות) שונים ? (לעשות פולימורפיזם ל4 הסוגים זה לא כל כך מתאים כי אין להם קשר ביניהם) האם ניתן לעשות מחלקה אבסטרקטית של רשימה מקושרת ואותה יירשו 4 מחלקות רשימות מקושרות נגזרות שיפעלו לפי מתודות מתאימות לטיפוס ?
פורסם 2011 באפריל 2814 שנים נראה לי שלא הבנתי את השאלהאני אנסה לענות עליה במילה אחת templates?אני מניח שלא הבנתי את השאלה, כי סיבכת 2 שאלות.האם ניתן לעשות רשימה מקושרת שתיהיה מסוגלת להצביע על סוגים שונים של טיפוסים? כן, על ידי templates, בשיטות ישנות יותר(שפת c)ומסובכות יותר, עושים את זה עם מצביעי void והמרתם, פשוט מיותר כשקיים templates.האם ניתן לעשות מחלקה אבסטרקטית של רשימה מקושרת ואותה יירשו 4 מחלקות רשימות מקושרות נגזרות שיפעלו לפי מתודות מתאימות לטיפוס ? רשימה מקושרת לא יורשים, אבל הבנתי את השאלה, זה אפשרי, הכל זה מימוש של איך שאתה רוצה לבצע, מצד שני, למה חשוב אילו מתודות מחזיקים הטיפוסים, זה סך הכל רשימה מקושרת, היא מצביעה על הטיפוס שיצרת עבורה, איך תשתמש בו, זה בעיה שלך, לא של המחלקה של הרשימה.
פורסם 2011 באפריל 2914 שנים הנה התחלה:template <typename T>struct Node{ T value; Node* next; };בסוג שלמעלה, יש מחלקה Node<T> המכילה את הטיפוס של הרשימה.עוד דרך לעשות רשימה מקושרת זה כאשר בכל Node<T> יש מצביע לערך (כלומר מצביע ל-T) במקום את הערך עצמו.
פורסם 2011 באפריל 2914 שנים מחבר אני אנסה להסביר את הבעיה יותר טוב....יש לי 4 קלאסים (CLASS) שונים . במהלך התכנית אני צרך להחזיק 4 רשימות מקושרות שכל NODE יצביע לי על הטיפוס הספציפי של הרשימה המקושרת.למממש 4 קבצי H ו-4 קבצי CPP נראה לי קצת בזבזני...איך אני יכול להשתמש בכל הנושא של ירושה ופולימורפיזם כדי לממש את הבעיה ? ניתן להגדיר מחלקה אבסטרקטית שך רשימה מקושרת שממנה יירשו כל הארבעה ? יש הצעות ? מקווה שזה ברור יותר...תודה רבה מראש
פורסם 2011 באפריל 2914 שנים אז כן, אתה צריך להשתמש במחלקה אבסטרקטית.תגדיר מחלקה אבסטרקטית (נקרא לה Base). ארבע המחלקות שלך צריכות לרשת ממנה, ואז אתה רק צריך להגדיר רשימה מקושרת של אובייקטים מטיפוס Base. כמובן בשביל לעבוד איתם אתה תצטרך להמיר את האיברים של הרשימה לטיפוסים האמיתיים שלהם בזמן ריצה.
פורסם 2011 באפריל 2914 שנים (יתכן שמה שכתוב פה נוגע יותר לפתרון הכללי ולא לתרגיל שאתה פותר, אבל עדיין כדאי לקרוא)יש חשיבות גדולה לשאלה הבאה: האם אתה רוצה שאפשר יהיה להחזיק באותה רשימה איברים מכל ארבעת הטיפוסים, או שכל רשימה יכולה להחזיק טיפוס מסוג בודד וידוע מראש? במקרה שלך, אתה רוצה שבכל רשימה יהיה רק טיפוס אחד וידוע מראש.במקרה שלך נראה הפתרון המועדף הוא דווקא טמפלטים ולא פולימורפיזם. קשרי ירושה הם קשרים מאוד חזקים בין טיפוסים ואם ארבעת המחלקות באמת לא קשורות, אז עדיף לא לעוות את מבנה המחלקות רק כדי שאפשר יהיה להכניסם לרשימה.אולם אני מבין שכרגע אתה לא יכול להשתמש בטמפלטים, ולמרבה הצער נראה לי שכוונת המשורר (מחבר התרגיל) היא שכן תירש מאב משותף. תפתור את התרגיל "נכון" (למרות שמה שהתרגיל מלמד הוא לא נכון), ותזכור שפולימורפיזם זה לא התשובה להכל. ספציפית ב-++C מנגנוני טמפלטים הם טובים יותר על מנת לייצר containers כמו רשימות וכו'.עוד דרך לבצע את המשימה בלי לחייב את 4 המחלקות לרשת מאב משותף זה mixins, אבל זה דורש multiple inheritence ובסופו של דבר התוצאה במקרה זה היא מימוש עקום של הפתרון הטמפלטי.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.