class- מחלקות (++C) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

class- מחלקות (++C)


אתי :)

Recommended Posts

היי...

אני אשמח אם תוכלו לתת לי קצת הסבר לגבי class.

הבנתי שיש בזה חלקים שהם public ו- private.

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

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

למה הכוונה שאומרים לי בונים והורסים (constructor) ומה הכוונה לדיפולטי?!?!? (יש פונקציות/ מתודות שיש להם בונים והורסים ויש כאלה שמשתמשים בדיפולטי...מה הכוונה?!?!?!?).

מומולץ לעשות לזה קבצי C ו H בנפרד?

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

תודה :)

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

מאיזה מקור את לומדת ++C?

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

private זה דברים שהמחלקה לא חושפת, והיא מאפשר רק לפונקציות של אותה המחלקה לגשת אליהם.

למה זה טוב? בשביל אבסטרקציה. המחלקה לפעמים צריכה לשמור לעצמה נתונים שהיא לא רוצה שתהיה אליהם גישה מבחוץ. נניח לדוגמה שיש לנו מחלקה שמייצגת מספר רציונלי (דהיינו מספר מהצורה a/b כאשר a ו-b שלמים, ו-b שונה מ-0). אז למחלקה הזו צריכים להיות שני איברים שמחזיקים את ה-a ו-b הללו. אם השדות האלה היו public, אז כל מי שרוצה היה יכול לשנות אותם. אבל אז אפשר היה לשנות אותם לערכים לא חוקיים (לדוגמה, לקבוע b=0), ולגרום לשגיאות. אם לעומת זאת a ו-b הם שדות פרטיים, אז רק המחלקה עצמה יכולה לגשת אליהם, וככה לדאוג שאף אחד לא מורשה לא יוכל לשנות את השדות האלה.

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

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

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

כן, תמיד מומלץ להפריד בין קבצי C ו-H (בקובץ H שמים את ההגדרות של מחלקות ופונקציות, ובקובץ C שמים את המימוש של פונקציות)

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

מה זאת אומרת איך זה יכול לעזור לך? זה כמו לשאול איך פונקציות יכולות לעזור לך...

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

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

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

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

  • 2 שבועות מאוחר יותר...

תודה.

בהמשך לנושא...

האם אפשר לעשות רשימה מקושרת של קלאסים?

איך זה מתבצע בתכלס?

נגיד שהשם של ה class הוא אתי:

עושים ב private

Eti* next? כמו במבנים?

ואז ב public אני עושה פונקציות שמעדכנות את הרשימה כל הזמן?

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

אז אולי אני עושה משהו לא נכון?

זה לא עובד לי.

נותן לי הודעת שגיאה:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

זה הclass שלי: (time ו date גם class כל אחד בנפרד)

 
class Event{
private:
Time* startTime;
Time* endTime;
Date* startDate;
Date* endDate;
Event* next;

public:
Event( Time* startTime, Time* endTime, Date* startDate, Date* endDate);
~Event();
};

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

על כל שורה של time* או date* זה נותן לי את השגיאה הזו...

Time* startTime;

Time* endTime;

Date* startDate;

Date* endDate;

זה רושם: (לכל שורה בנפרד) 1>error C2143: syntax error : missing ';' before '*'

1>error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

ארכיון

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

×
  • צור חדש...