פורסם 2007 בדצמבר 1817 שנים נתונה הבעיה:יש מחלקה A:class A{public: void doA();private: ...};יש מחלקה אחרת Bclass B{public: void doB();private: A _a;};כמו שניתן לראות היחס של A ו B הוא יחס של B has Aמילת המפתח פה היא has, כאמור אין אפשרות להישתמש בהורשה.כמו כן המתשמש יכול ליצור רק מחלקות מסוג B ( A לא ניתן ליצור כי היא לא תעבוד בלי B). כמו כן המחלקה B אמורה לספק גישה למתודה doA של המחלקה A. איך ניתן לעצב את זה?הרעיונות היחידים שעלו לי לראש הם:1. להוסיף מתודה ל B שנרקראת const A& getA() const{return _a}ואז לקרוא לה ככה b.getA().doA();2. להוסיף ל B מתודה שנקראת void doAStuff(){ _a.doA();}אבקש את עזרתכם בלבחור בעיצוב הנכון ביותר מבין השתיים או להמליץ על עיצוב אחר שאני כנראה לא מכיר שיכול לפתור את הבעיה הנ"ל.תודה רבה מראש.
פורסם 2007 בדצמבר 1817 שנים B יכולה לרשת את A. ואז אתה יכול לעשות את A כמחלקה Pure Virtualבמצב כזה אי אפשר ליצור אובייקטים מסוג A, ותוכל להשתמש במתודה doA דרך אוביקט מסוג B.נראה לי הדרך הכי נכונה.
פורסם 2007 בדצמבר 1917 שנים מחבר B לא יכול לרשת מ A מסיבה הפשוטה שזה לא נכון, תתיחס אל B כאל מכונית ואל A כאל גלגלים. מכונית היא לא סוג של גלגלים ולכן היחס פה הוא has-aתודה בכל מקרה.
פורסם 2007 בדצמבר 1917 שנים לפעמים אפשר להשתמש ב-private inheritance אשר הרבה פעמים אומר implemented-in-terms-of ויש דמיון בינו לבין הכלה (aggregation או composition).בגדול, כאשר זה אפשרי, עדיף לרוב להשתמש בהכלה מאשר בירושה פרטית. מומלץ בחום:http://www.parashift.com/c++-faq-lite/private-inheritance.html
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.