עבור לתוכן

|שפת C| שאלה על GENERIC ADT...

Featured Replies

פורסם

כשאני יוצר מבנה גנרי (עץ או וקטור - לא משנה...) ובתוכו יש מצביעים לפונקציות אז איך המצביע עצמו יודע לאיזה פונקציה להצביע , לפונקציה שעושה פעולות עם INT או פונקציה עם פעולות עם CHAR?

תודה...

פורסם

מה זאת אומרת? למצביע לפונקציה יש טיפוס. אם המצביעים הם מטיפוס *void אז הוא יכול להצביע לכל מקום, לא משנה מה יש שם.

פורסם
  • מחבר

הכוונה היא , מתי העסק מפסיק להיות גנרי והפונקציה מזהה שמשתמש מתעסק עם INT או CHAR או כל טיפוס אחר...

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

פורסם

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

פורסם
  • מחבר

אוקיי . תודה רבה!

פורסם

הנה הרחבה שאף אחד לא ביקש אבל אני מקווה שתקרא:

ב-C, בזמן ריצה הקוד לא יודע על מה מצביע מצביע. המידע הזה קיים רק בקומפיילר, בזמן קומפילציה.

על כן פונקציה שמקבלת מצביע מטיפוס T פשוט מניחה שהזכרון שעליה המצביע מצביע (אוף) הוא T חוקי ומתנהגת בהתאם. הקומפיילר מנסה לבדוק בזמן קומפילציה שזה תמיד מתקיים, ע"י בדיקת טיפוסים. אבל הוא לא תמיד יכול, ואם כמתכנת תעביר מצביע למשהו שהוא לא T אז יהיו צרות.

ואכן היוצא דופן הוא void* שעליו הקומפיילר לא יודע דבר, וזה מגדיל את האחריות של המתכנת לדאוג לכך שהמצביעים יהיו מהטיפוסים הנכונים ולעשות המרות נכונות.

כמתכנת, אם בעתיד תרצה משהו יותר משוכלל אתה יכול לממש מנגנון טיפוסים בזמן ריצה משלך (הבסיס לא קשה, לדוגמא enum שיועבר יחד עם כל מצביע) או להשתמש בשפות שעושות את זה בשבילך (++C#, JAVA, C), או אפילו בשפות נטולות בקרת טיפוסים (פייתון).

פורסם
  • מחבר

תודה רבה ! :xyxthumbs:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים