המושג של מצביעים אטומים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 17 מתוך 61.
עד כה, כאשר אנחנו מגדירים מבנה בקובץ כותרת, כל מי שכולל את קובץ הכותרת הזה יכול לראות ולגשת ישירות לכל האיברים שלו. הדבר מפר את עקרון הכימוס: הסתרת פרטים פנימיים מקוד חיצוני.
C מספקת טכניקה עוצמתית שנקראת מצביעים אטומים כדי לפתור את הבעיה. הרעיון פשוט: מצהירים ש־struct קיים בקובץ הכותרת, אבל לא חושפים מה יש בתוכו. עושים זאת באמצעות טיפוס לא שלם:
// wallet.h
typedef struct Wallet Wallet; // הכרזה בלבד - ללא גוף!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
שימו לב שאין סוגריים מסולסלים. אנחנו אף פעם לא מגדירים מה מכיל Wallet. המהדר יודע שהטיפוס קיים, אבל לא את הגודל שלו או את החברים שלו. משמעות הדבר היא שקוד שכולל את קובץ הכותרת הזה יכול לעבוד רק עם מצביעים אל Wallet, ולעולם לא עם המבנה עצמו ישירות.
למה זה חשוב? מכיוון שההגדרה בפועל של המבנה מוסתרת בקובץ .c, שום קוד שמשתמש בקובץ הכותרת שלך לא יכול לכתוב w->balance או sizeof(Wallet). הוא חייב להשתמש בפונקציות שאתה מספק. כך אתה שולט בכל הגישה לנתונים, ותוכל לשנות את המבנה הפנימי בהמשך בלי לשבור קוד שתלוי בקובץ הכותרת שלך.
בשיעור הבא תתרגלו להגדיר את גוף ה-struct עצמו בתוך קובץ המקור, וכך תשלים את תבנית המצביע האטום.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין