עבור לתוכן

הורשה במחלקות סי++? מה מתי ולמה?

Featured Replies

פורסם

יש לי שאלה: בשביל מה בעצם צריך הורשה של מחלקות? מתי משתמשים בזה?

האם בדוגמא הבאה יש צורך בהורשת מחלקות?:

ברצוני לבנות מפת משחק, המפה מורכבת מ"בלוקים" בגודל X*Y, לכל בלוק יש את התמונה שלו, נקודות ציון (X,Y) משלו, ונגיד מצב האם הבלוק פעיל לא פעיל, האם ניתן לעבור דרכו או לא ניתן וכו'.

אני יוצר מחלקה אשר מטפלת בבלוק אחד ויחיד!. אך ברצוני לבנות מפה זוכרים? בשביל לבנות מפה אני צריך אוסף של בלוקים. נגיד אני משתמש במערך של 10*10 בלוקים וסך הכל יש לי מפה של 100 בלוקים. למפה יש פונקציות משלה כגון, drawmap, initmap וכו'. האם יש צורך לאסוף את כל המשתנים של המפה וכל הפונקציה שלה למחלקה שתירש (לא יודע איך לבטא את זה נכון ובטח שלא איך רושמים את זה נכון :\) מהמחלקה "בלוק"? או שמפסיק ליצור מחלקה חדשה עצמאית? או אולי בכלל אין צורך במחלקה?

כמו כן אבקש פירוט מתי כן משתמשים/לא משתמשים בהורשת מחלקות.

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

פורסם

למפה יש מספר בלוקים - הכלה.

מפה היא לא סוג של בלוק - לא הורשה.

פורסם
  • מחבר

מה שאתה בצעם מנסה לומר זה שאם X מורכב ממספר Yים (Y זה מחלקה) אז X אמור להיות הכלה של Y? ואם X הוא לא סוג של Y אז אין צורך בהורשה?

ומה זה הכלה?

פורסם

גם אם X מורכב מY אחד, וזה קשר של "שייך ל" ולא "סוג של" זה הכלה ולא הורשה.

פורסם
  • מחבר

אז במקרה שלי אין צורך ליצור את המחלקה Map כמחלקה שהורשה ממחלקה Block?

ועדיין לא הבנתי מה זה הכלה :\

פורסם

אני אסביר לך בפשטות את הכוונה של הכלה והורשה.

יש מחלקה בשם "בן אדם"

יש מחלקה בשם "מהנדס"

מהנדס הוא סוג של בן אדם נכון?? לכן מהנדס יורש מבן אדם. זאת הורשה.

יש מחלקה בשם "לב"

לבן אדם יש לב נכון? אז הוא מכיל לב. זאת הכלה.

פורסם
  • מחבר

אוקי הבנתי..

עוד שאלה איך אני מיישם הכלה בסי++? יש אולי מדריך? או לפחות איך אומרים הכלה באנגלית שאני אוכל לחפש בגוגל.

פורסם

הורשה בC++:

A יורש מB



class A:public B
{


};


הכלה:

A מכיל את B



class A
{
B b;

};

פורסם

הורשה חוסכת בכתיבת קוד, הרבה קוד

פורסם
  • מחבר

תודה רבה הבנתי את הרעיון

פורסם

אני ממליץ לך כן לבבוד בירושה ולהגדיר מחלקת בסיס שתהיה המפה הראשית , וממנה תגדיר מחלקה נגזרת בלוק שתהיה Template.

מימוש באופן הזה לדעתי יהיה יעיל מאוד למטרות שלך ויאפשר לך מודולריות מקסימאלית לעדכונים בהמשך.

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

הספר שאני ממליץ עליו הוא של Deitel and Deitel ,C++ How to Program או שפשוט תברר באוניברסיטה הקרובה לביתך אם בסמסטר הקרוב יש קורס בתכנות מונחה עצמים ותיכנס אליו (תברר ברשת כמובן..)

פורסם

אני ממליץ לך כן לבבוד בירושה ולהגדיר מחלקת בסיס שתהיה המפה הראשית , וממנה תגדיר מחלקה נגזרת בלוק שתהיה Template.

בבקשה תגיד שאתה צוחק.

גם בגלל שהבן-אדם רק מנסה להבין מה זה ירושה והכלה, ואתה שולח אותו ל- templates.

גם בגלל שהקשר שהוא תיאר בין map ל- block הוא בבירור קשר של הכלה.

ה"בחירה" בין ירושה להכלה נעשית בשלב הגדרת הבעיה.

אם ב- map יש X x Y בלוקים, אז זה הקשר בין map ל- block.

פורסם
  • מחבר
גם בגלל שהבן-אדם רק מנסה להבין מה זה ירושה והכלה, ואתה שולח אותו ל- templates.

לא לזלזל אני כן יודע מה זה templates

פורסם

לא לזלזל אני כן יודע מה זה templates

יש הבדל בין לדעת, לבין להבין את כל ההשכלות שלהם (למשל פיצוץ גודל קובץ הרצה וכו')...

מה גם, נושא הירושה הוא מאוד מורכב בשפה C++ (במיוחד בגלל כל נושא הירושה המרובה), ויש כל מני נושאים מורכבים בו (הסתרה, וירטואליות, מבנה בזכרון, שלבי אתחול ועוד ועוד ועוד)...

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

ארכיון

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

דיונים חדשים