עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

מחלקה שמכילה מחלקה אחרת. בעית עיצוב.

Featured Replies

פורסם

נתונה הבעיה:

יש מחלקה A:


class A{
public:
void doA();
private:
...
};

יש מחלקה אחרת B


class 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();}

אבקש את עזרתכם בלבחור בעיצוב הנכון ביותר מבין השתיים או להמליץ על עיצוב אחר שאני כנראה לא מכיר שיכול לפתור את הבעיה הנ"ל.

תודה רבה מראש.

פורסם

B יכולה לרשת את A. ואז אתה יכול לעשות את A כמחלקה Pure Virtual

במצב כזה אי אפשר ליצור אובייקטים מסוג A, ותוכל להשתמש במתודה doA דרך אוביקט מסוג B.

נראה לי הדרך הכי נכונה.

פורסם
  • מחבר

B לא יכול לרשת מ A מסיבה הפשוטה שזה לא נכון, תתיחס אל B כאל מכונית ואל A כאל גלגלים. מכונית היא לא סוג של גלגלים ולכן היחס פה הוא has-a

תודה בכל מקרה.

פורסם

לפעמים אפשר להשתמש ב-private inheritance אשר הרבה פעמים אומר implemented-in-terms-of ויש דמיון בינו לבין הכלה (aggregation או composition).

בגדול, כאשר זה אפשרי, עדיף לרוב להשתמש בהכלה מאשר בירושה פרטית.

מומלץ בחום:

http://www.parashift.com/c++-faq-lite/private-inheritance.html

פורסם
  • מחבר

הבנתי תודה רבה.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.