Menu
Coddy logo textTech

מבנים כאובייקטים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 6 מתוך 61.

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

חשוב על struct כחלק ה״נתונים״ של אובייקט. הוא מכיל את המצב: הערכים שמגדירים מה האובייקט הוא כרגע:

typedef struct {
    int value;
} Counter;

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

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

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

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // מדפיס: 1
    return 0;
}

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

challenge icon

אתגר

קל

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

תיצרו שלושה קבצים:

  • counter.h: קובץ הכותרת שלכם, שבו תצהירו על המבנה Counter עם איבר יחיד מסוג int value. כמו כן, הצהירו על שתי פונקציות שמתפקדות כ״מתודות״ של המונה: counter_increment (מקבלת מצביע ל-Counter ומגדילה את הערך שלו ב-1) ו-counter_get (מקבלת מצביע ל-Counter ומחזירה את הערך הנוכחי שלו). השתמשו בשומרי הכללה עם הסמל COUNTER_H.
  • counter.c: קובץ המקור שלכם, שבו תממשו את שתי הפונקציות. זכרו לכלול את קובץ הכותרת שלכם.
  • main.c: הקובץ הראשי שלכם, שבו תיצרו Counter, תבצעו עליו פעולות ותציגו את התוצאות.

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

בקובץ הראשי שלכם, אתחלו Counter עם הערך ההתחלתי, ואז קראו ל-counter_increment את מספר הפעמים שצוין. לבסוף, השתמשו ב-counter_get כדי לקבל ולהדפיס את הערך הסופי.

הדפיסו את התוצאה בפורמט הזה:

Final value: {result}

לדוגמה, עם ערך התחלתי של 5 ו-3 הגדלות, הפלט יהיה:

Final value: 8

נסו בעצמכם

#include <stdio.h>
#include "counter.h"

int main() {
    // קראו את הקלט
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: צרו Counter ואתחלו אותו עם starting_value
    
    // TODO: קראו ל-counter_increment מספר הפעמים שצוין
    
    // TODO: השתמשו ב-counter_get כדי לקבל את הערך הסופי ולהדפיס אותו
    // פורמט ההדפסה: "Final value: {result}"
    
    return 0;
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C אונליין