ההבדלים בין מחלקה ל struct.....

  • פותח הנושא stac
  • פורסם בתאריך

stac

New member
ההבדלים בין מחלקה ל struct.....

בשביל מה לעמיס על בוני המהדרים אם שני הדברים האלו עושים בדיוק אותו דבר?
 

erezsh

New member
פשוט מאוד

struct זה אות אחת יותר לכתוב, ולכן לא מומלץ להשתמש בו
 

אלדד28

New member
כדי לשמור על תאימות ל-C.

יש שתי אופציות - האחת הייתה לבטל את struct ולהישאר רק עם class, ואז לא הייתה תאימות ל-C, והשניה הייתה להשתמש ב-struct בתור אובייקט - אבל אז השם לא היה מתאים וזה לא היה בהיר כל כך. אז לקחו את האופציה השלישית, ונשארו עם שתיהן. יש הבדל אחד בין struct לבין class - ה-default permission הוא public ב-struct ו-private ב-class.
 

זהיר

New member
בדיוק - וזה ההבדל |הדגש|הטכני|סדגש|

מבחינת המשמעות ++C "אומרת": 1. הדבר הנכון בבניית עצמים הוא להסתיר את המימוש (כולל חלק מהפונקציות). רק מה שאתה "פותח" במפורש יהיה חשוף למשתמש. (מי שיכול להסיק מסקנות לגבי משתנים גלובליים - מרוויח) 2. אם אתה בונה עצמים רק בשביל לאגד כמה שדות, בלי לתת להם התנהגות, אתה יכול להשתמש ב STRUCT ואז זה חלק מהתיעוד - כבר לא צריך להוסיף הערה על הכוונות של המתכנת. רמז: מבנים כאלה יהיו ברוב המקרים בחלק הפרטי של מחלקה אחרת. תכנתו בזהירות
 

אלדד28

New member
זה נכון מאוד,

אבל אי אפשר לומר שהם לא "אותו דבר". מה שאתה מדבר עליו הוא מסורת, ולא משהו שלא יעבוד אחרת. מה לגבי, נגיד, מבנה (תבחר אתה - struct או class), שבוחר נגיד להחזיק int אחד ו-pointer אחד (נגיד ל-void), ואז אתה רוצה לממש CTOR, DTOR ו-COPY CTOR (ונוסיף גם =). אבל זהו - אין לו שום דבר מעבר. זה יהיה class? אולי struct? מה תבחר?
 

stac

New member
כן בחיית אין לכם איזה כלל אצבע...

שיעזור לי לבחור?
 

אלדד28

New member
זהיר נתן לך את כלל האצבע המקובל.

יש מקרים חריגים, אבל מה שזהיר נתן זה 99% מהמקרים.
 

eyalbd

New member
עוד הבדל

// default public inheritance // struct A : B {}; // default private inheritance // class A : B {};​
 

stac

New member
אז התשובה היא....

לשמור תאימות לאחור? אבל עם לiostream.h למשל לא שמרו תאימות לאחור למה לזה כן נו טוב זה כבר לא משנה, אבל מצאתי שהרבה יותר יפה למראה עיין להשתמש ב struct להצרת node ברשימה מקושרת, חח ולהגדיר LIST כCLASS.
 

erezsh

New member
אממ..

iostream.h זה לא חלק מ-C בכל מקרה. זה קיים רק ב-C++. אני לא מומחה ל-C++, אבל לפי מה שהבנתי זה היה יותר כמו hack של כותבי הקומפיילרים כדי לא להתברדק יותר מדי.
 
למעלה