עבור לתוכן

חידון למבינים בC++ : מה ההבדל בין struct לclass

מה ההבדל בין struct לclass ? 190 הצבעות

  1. 1. מה ההבדל בין struct לclass ?

    • struct נשמר בstack, וclass נשמר בheap
    • אי אפשר לרשת struct
      0
    • struct modifier can only be public
    • אפשרות 1+2+3 נכונות
    • אין הבדל כלל
      0

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

Featured Replies

פורסם

נכתב כדי לראות מה אתם באמת יודעים על ההבדלים ביניהם.

פורסם

ישנם יותר הבדלים משרשמת

פורסם

אף אחת מהאפשרויות, כפי שרשמת אותן, אינה נכונה.

ההבדל היחיד מבחינת השפה היא שבברירת מחדל כל ה-member-ים של struct הם public, ואילו ב-class כולם private בברירת מחדל. כמו כן כשיורשים מ-struct אז בברירת מחדל מקבלים public inheritance.

לרוב נהוג להשתמש ב-struct וב-class על מנת להבדיל הבדלים סמנטיים, לדוגמא POD יהיו struct, והאחרים class, ועוד הבחנות דומות. זה עניין של סגנון.

כמו כן אני לא רואה למה זה "סקר". זה לא שהתשובה שהרוב בחרו בה תהיה נכונה...

פורסם
  • מחבר

אף אחת מהאפשרויות, כפי שרשמת אותן, אינה נכונה.

ההבדל היחיד מבחינת השפה היא שבברירת מחדל כל ה-member-ים של struct הם public, ואילו ב-class כולם private בברירת מחדל. כמו כן כשיורשים מ-struct אז בברירת מחדל מקבלים public inheritance.

לרוב נהוג להשתמש ב-struct וב-class על מנת להבדיל הבדלים סמנטיים, לדוגמא POD יהיו struct, והאחרים class, ועוד הבחנות דומות. זה עניין של סגנון.

כמו כן אני לא רואה למה זה "סקר". זה לא שהתשובה שהרוב בחרו בה תהיה נכונה...

אתה בטוח שזה הכל ?

יש טענות שונות ומשונות לגבי זה שזה לא נכון


#include <iostream>
using namespace std;

struct Whatever
{
virtual void foo() { }
virtual ~Whatever() { }
};

struct Derived : Whatever
{
void foo() { cout << "value=" << value; }
Derived(int n) : Whatever(), value(n) { }

private:
int value; // private data member
};

int main()
{
Whatever *pW = new Derived(10);
pW->foo(); // virtual call
delete pW;
return 0;
}

יש שאלה קשה על היכן ממוקם כל אחד בזיכרון :

http://blog.stevedoria.net/20050913/differences-between-cpp-classes-and-structs

לפי ויקיפדיה יש רק הבדל סינטקטי:

http://en.wikipedia.org/wiki/C%2B%2B_classes

לפי MSDN:

http://msdn.microsoft.com/en-us/library/4a1hcx0y(VS.80).aspx

ובמקום אחר - תשובה רלוונטית עוסקת בVALUE TYPE VS REF TYPE ?

http://wiki.answers.com/Q/What_is_the_difference_between_a_structure_and_a_class

פורסם

לא ברור לי מה דוגמת הקוד שלך ניסתה לעשות, כי אצלי זה עובד מעולה (מדפיס 10).

לגבי הלינקים שנתת:

בשלושת הלינקים הראשונים מדובר רק על ה-visibility, וכתוב שם בדיוק מה שנאמר כאן, פחות או יותר. אין שום התייחסות ל-heap/stack.

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

(באתר הזה התשובות הן לא "תשובות רשמיות", אלא דברים שרשמו גולשים כמו בפורום)

פורסם

כעושים סקר,מומלץ שהוא יכיל את התשובה הנכונה :smile1:

ההבדל הטכני היחידי בין struct ל class זה הDefault access modifier (פאבליק בסטרקט,פרייבט בקלאס).

ההבדל האמיתי בינהם הוא מבחינת העיצוב: struct מגדיר מבנה נתונים, class מגדיר התנהגות. כמובן שהשפה לא אוכפת את זה בשום צורה, אבל זה ההגדרה המקובלת שכל מתכנת שפוי עוקב אחרייה.

פורסם
  • מחבר

^^^לא נכון.

נכון שלא שמתי את התשובה הנכונה, טעות שלי. אני עדיין לא משוכנע שאין הבדל לגבי היכן STRUCT והיכן CLASS נרשמים. אני חושב שהdefault access modifier קשור לזה מאוד. כרגע אני מנסה להשוות ביצועים בין מימוש בCLASS ומימוש בSTRUCT, ויש מעט הבדלים, השאלה היא האם הם מובהקים.

פורסם

אין שום הבדל מעבר למה שכתבתי למעלה (ראה את אותו דבר ב: http://www.parashift.com/c++-faq-lite/classes-and-objects.html#faq-7.8)

הבדלי ביצועים אין לך שום דרך למדוד בכל מקרה, כל הבדל ביצועים שתמצא מקורו באפקט חיצוני (תוכנות אחרות \ מערכת ההפעלה).

פורסם

^^^לא נכון.

נכון שלא שמתי את התשובה הנכונה, טעות שלי. אני עדיין לא משוכנע שאין הבדל לגבי היכן STRUCT והיכן CLASS נרשמים.

קיים הבדל כזה ב-#C. יכול להיות שבגלל זה אתה מתבלבל.

פורסם

^^^לא נכון.

נכון שלא שמתי את התשובה הנכונה, טעות שלי. אני עדיין לא משוכנע שאין הבדל לגבי היכן STRUCT והיכן CLASS נרשמים.

פעם היה פועל בעברית שהשורש שלו היה כ.ת.ב. מה קרה? נראה שכולם היום "רושמים". לי זה נשמע כמו עברית עילגת, אבל אולי אני פשוט מנותק?

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

פורסם

שלום לכולם, קראתי את הטיעונים של כולם וניתקעתי ב-heap

אף פעם לא יצא לי ללמוד על זה, יצא לי ללמוד על המחסנית שעובדת ב-LIFO (באסמבלר) אם זה מה שאתם מתכוונים,

אבל מה זה heap? ואיך הוא ניתן לשימוש?

פורסם

כשמדברים על stack/heap אז יש שני דברים נפרדים:

יש מבני נתונים כלליים שנקראים stack (מחסנית) ו-heap (ערימה).

ויש אזורים בזכרון של התוכנית שנקראים גם כן stack (שם מאוחסנים כל המשתנים המקומיים שאתה מגדיר בפונקציה, והוא מבוסס על מבנה הנתונים שנקרא מחסנית), ו-heap (שם מאוחסן כל הזכרון שמוקצה באופן דינמית ע"י new/malloc, והוא למעשה לא דומה למבנה הנתונים שנקרא ערימה).

בקיצור, ב-heap אתה משתמש כל פעם שאתה עושה new/malloc.

פורסם

פעם היה פועל בעברית שהשורש שלו היה כ.ת.ב. מה קרה? נראה שכולם היום "רושמים". לי זה נשמע כמו עברית עילגת, אבל אולי אני פשוט מנותק?

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

LOL

ארכיון

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

דיונים חדשים