שְׁאֵלָה:
אילו תקורות ושיקולים אחרים קיימים בעת שימוש במבנה לעומת כיתה?
Cybergibbons
2014-03-07 18:29:32 UTC
view on stackexchange narkive permalink

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

Arduino מביא C ++ לשולחן, כך שנוכל להשתמש בשיעורים במקום.

נניח שיש לנו שני שונים מבני נתונים שיכולים להיחשב דומים מאוד:

  typedef struct {int valueOne; int valueTwo; int valueThree;} value_t;  

ו-:

  class class {public: int valueOne; int valueTwo; int valueThree;}  

מבחינת זיכרון, איזה הבדל זה ישנה?

אני עדיין רואה את השימוש בטכניקת ה- struct בכבדות - מדוע זה?

אם אני זוכר את ה- C + + שלי נכון אין הבדל בין 'מבנה' לבין 'מחלקה' מלבד הנראות המוגדרת כברירת מחדל
הייתי מניח ש- struct`s משמשים בעיקר מכיוון שהרוב הגדול ** של החומרה המוטמעת מקודד ב- C, כך שכל מי שמבזבז זמן רב בכתיבת קוד עבור MCU קטנים, כנראה מכיר את C הרבה יותר טוב מ- C ++ ומגיע אוטומטית עבור שפות C לפני שפות C ++. זה נושא ביצועים * מתכנת *.
חָמֵשׁ תשובות:
#1
+16
ratchet freak
2014-03-07 20:41:46 UTC
view on stackexchange narkive permalink

כפי שנלקח מהתשובה המקובלת מ- מתי כדאי להשתמש בכיתה לעומת מבנה ב- C ++?

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

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

מבחינה זיכרונית, שינוי הגישה לא משנה דבר ובהתחשב באילוצי הזיכרון של הארדואינו, אנשים נוטים פחות להשתמש בשיעורים עם היררכיות מורכבות, אך בכל מקרה מעדיפים את דרכי ה- POD.

#2
+9
Peter Bloomfield
2014-03-07 20:53:46 UTC
view on stackexchange narkive permalink

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

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

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

#3
+4
microtherion
2014-03-07 21:29:42 UTC
view on stackexchange narkive permalink

כפי שציינו תשובות אחרות, ה struct ו- class הספציפיים שלך אינם ניתנים להבחנה בין ביצועים (ישנם הבדלים קלים בהיקפי שמות הסוגים, בגלל הדרך הגדרת את המבנה שלך). התיחום ב- C ++ אינו בין struct ו- class , אלא בין סוגים שהם POD (נתונים ישנים רגילים) לבין סוגים שאינם, כמו מוסבר ב דיון זה.

#4
+3
Mud
2014-03-20 02:35:17 UTC
view on stackexchange narkive permalink

מבחינת זיכרון, איזה הבדל זה ישנה?

ללא. סטרוקטורים ומעמדות הם אותו דבר, שונים רק ברמות ההגנה, ומיידי או יוצר 'אובייקט'.

עדיין רואים את טכניקת ה- struct בשימוש כבד - מדוע זה?

פחות הקלדה אם אינך מנסה להסתיר את חברי הנתונים.

#5
+2
codah
2014-03-20 02:20:24 UTC
view on stackexchange narkive permalink

שים לב ש

  typedef struct {...} Foo;  

מיושן ב- C ++ ועליך פשוט להשתמש

  struct Foo {...};  

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

כפי שהוזכר על ידי אחרים, השימוש ב- struct הוא בדרך כלל מוסכמה עבור סוגי POD. עדיין נותן חפץ).

אובייקט שאלה ערוך-> מחלקה.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...