חידון למבינים בC++ : מה ההבדל בין struct לclass - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


djhenrya

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

190 הצבעות

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

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


Recommended Posts

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

ההבדל היחיד מבחינת השפה היא שבברירת מחדל כל ה-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 נרשמים.

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

LOL

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...