סיכום: הקופסה הסודית
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 21 מתוך 61.
אתגר
קלבואו נבנה מודול Box שמדגים כימוס מלא. לתיבה שלך יהיו שלושה ממדים מוסתרים — רוחב, גובה ועומק — שאפשר לגשת אליהם רק דרך הפונקציות שתספק. כך פועל דפוס המצביע האטום המלא!
תיצור שלושה קבצים:
box.h: הממשק הציבורי שלך. הכרז על טיפוס אטוםBoxבאמצעות הצהרה מקדימה בלבד: גוף המבנה נשאר מוסתר. הכרז על הפונקציות האלה:create_box: מקבלת שלושה מספרים שלמים (רוחב, גובה ועומק) ומחזירה מצביע ל-Boxdestroy_box: משחררת את הזיכרון שהוקצהget_volume: מקבלתconst Box *ומחזירה את הנפח (רוחב × גובה × עומק)set_dimensions: מקבלת מצביע ל-Box ושלושה ערכי ממדים חדשים, ומחזירהint(1 במקרה של הצלחה, 0 אם אחד מהממדים שלילי או אפס)
BOX_H.box.c: הגדר אתstruct Boxבפועל עם שלושה איברים מוסתרים:int width,int heightו-int depth. ממש את כל ארבע הפונקציות. הבנאי שלך צריך להקצות ולאתחל את התיבה. הפונקציהset_dimensionsחייבת לוודא שכל שלושת הערכים חיוביים (גדולים מאפס) לפני החלת השינויים. אם ערך כלשהו נכשל בבדיקה, דחה את העדכון כולו והחזר 0.main.c: הדגם את התיבה המכומסת שלך על ידי יצירת אחת, בדיקת הנפח שלה, ניסיון לשנות את הממדים (גם לערכים תקינים וגם לערכים לא תקינים) וניקוי תקין של המשאבים.
תקבל חמישה קלטים: הרוחב ההתחלתי, הגובה ההתחלתי, העומק ההתחלתי, ואחריהם שלושה ממדים חדשים שיש לנסות להגדיר (ייתכן שיהיו בהם ערכים לא תקינים).
בקובץ הראשי שלך, צור תיבה עם הממדים ההתחלתיים והדפס את הנפח שלה. לאחר מכן נסה להגדיר את הממדים החדשים: הדפס אם העדכון הצליח ואת הנפח שהתקבל. לבסוף, שחרר את התיבה ואשר שהניקוי הושלם.
הדפס את הפלט בפורמט הזה:
Volume: {volume}
Set: {0 or 1}
Volume: {volume}
Destroyedלדוגמה, עבור הקלטים 2, 3, 4, 5, 5, 5, הפלט יהיה:
Volume: 24
Set: 1
Volume: 125
Destroyedעבור הקלטים 2, 3, 4, -1, 5, 5, הפלט יהיה:
Volume: 24
Set: 0
Volume: 24
Destroyedשים לב כיצד הבדיקה בתוך set_dimensions מגינה על התיבה שלך מפני מצבים לא תקינים: קוד חיצוני אינו יכול לעקוף את הכללים שלך, כי הממדים מוסתרים לחלוטין מאחורי הממשק שלך.
נסו בעצמכם
#include <stdio.h>
#include "box.h"
int main() {
// קרא את הממדים ההתחלתיים
int width, height, depth;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &depth);
// קרא את הממדים החדשים שיש לנסות להגדיר
int new_w, new_h, new_d;
scanf("%d", &new_w);
scanf("%d", &new_h);
scanf("%d", &new_d);
// TODO: צור Box עם הממדים ההתחלתיים
// TODO: הדפס את הנפח ההתחלתי בפורמט: "Volume: {volume}"
// TODO: נסה להגדיר את הממדים החדשים ושמור את התוצאה
// TODO: הדפס אם ההגדרה הצליחה בפורמט: "Set: {0 or 1}"
// TODO: הדפס את הנפח שהתקבל בפורמט: "Volume: {volume}"
// TODO: השמד את התיבה והדפס "Destroyed"
return 0;
}
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין