סיכום: היררכיית צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 32 מתוך 61.
אתגר
קלנבנה היררכיית צורות מלאה שמדגימה את העוצמה של ירושה באמצעות הרכבה. תיצרו טיפוס בסיסי 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;
}
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין