Menu
Coddy logo textTech

סיכום: היררכיית צורות

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

challenge icon

אתגר

קל

נבנה היררכיית צורות מלאה שמדגימה את העוצמה של ירושה באמצעות הרכבה. תיצרו טיפוס בסיסי Shape שממנו כל צורה ספציפית יכולה לרשת, ואז תבנו Rect שמרחיב אותו.

תארגנו את הקוד שלכם בשלושה קבצים:

  • shape.h: הגדירו את היררכיית המבנים שלכם עם הגנות הכללה. צרו מבנה Shape עם שדה יחיד color (מספר שלם). לאחר מכן הגדירו מבנה Rect שמכיל את Shape כאיבר הראשון שלו ומוסיף שדות width ו-height (שניהם מספרים שלמים). הכריזו על שתי פונקציות: set_color שמקבלת Shape* וערך צבע חדש, ו-print_rect שמקבלת Rect*.
  • shape.c: ממשו את שתי הפונקציות. הפונקציה set_color שלכם פועלת עם טיפוס הבסיס. היא משנה את הצבע של כל צורה. הפונקציה print_rect שלכם מציגה את כל המידע על המלבן, כולל הצבע שהוא ירש.
  • main.c: צרו Rect ואתחלו את כל השדות שלו. לאחר מכן הדגימו המרה כלפי מעלה באמצעות קריאה ל-set_color עם המלבן שלכם לאחר המרה ל-Shape*. לבסוף, הדפיסו את המלבן כדי לוודא שהצבע השתנה דרך מצביע מטיפוס הבסיס.

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

בקובץ הראשי שלכם, צרו את המלבן עם הערכים ההתחלתיים, ואז השתמשו ב-set_color כדי לשנות את צבעו לערך החדש (זכרו להמיר את Rect* שלכם ל-Shape*), ולבסוף קראו ל-print_rect כדי להציג את התוצאה.

הפלט שלכם אמור להיראות כך:

Width: 10
Height: 5
Color: 7

כאשר 10 הוא הרוחב, 5 הוא הגובה, ו-7 הוא הצבע המעודכן (ולא הצבע ההתחלתי). התובנה המרכזית כאן היא ש-set_color אינה יודעת דבר על מלבנים. היא פועלת רק עם Shape. ובכל זאת, באמצעות כלל האיבר הראשון והמרה כלפי מעלה, צבע המלבן שלכם משתנה באמצעות הפונקציה הגנרית הזאת.

נסו בעצמכם

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

int main() {
    int width, height, initial_color, new_color;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &initial_color);
    scanf("%d", &new_color);
    
    // TODO: צרו Rect ואתחלו את כל השדות שלו
    // (width, height והצבע של ה-Shape המוטמע באמצעות initial_color)
    
    // TODO: קראו ל-set_color כשהמלבן מומר ל-Shape*
    // כדי לשנות את הצבע ל-new_color
    
    // TODO: קראו ל-print_rect כדי להציג את התוצאה
    
    return 0;
}

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

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