שאלה בנושא ADT

matliv

New member
שאלה בנושא ADT

שלום,
יש לי שאלה בנושא abstract data type שממומש ב-C.
בעיקרון ה-adt אמור לכלול מבנה נתונים כללי, משתנים של מבנה הנתונים הזה (מקביל לשדות של מחלקה), פונקציות שאפשר להפעיל על מבנה הנתונים ומצביעים לפונקציות שנדרשות כדי לבצע את הפעולות בהן צריך לדעת את הסוג המדויק של המשתנה שעובדים עליו.
השאלה היא מה עושים במקרה שצריך שדות שהם ייחודיים לאחד מהסוגים שימומשו על בסיס ה-ADT. כלומר ישנה פעולה כללית שה-ADT תומך בה, וכדי לממש אותה עבור אחד הסוגים יש צורך להחזיק משתנה כלשהו ואין בו צורך עבור הסוג האחר. האם המשתנה הזה צריך להיות מוחזק במשתנים של ה-ADT? הרי פרט ל-ADT עצמו אמורים להיות רק המימושים הספציפיים של המצביעים לפונקציות.
 
בשביל המקרה זה

יש שתי דרכים.
נניח שיש לנו מבנה נתונים ADT
אז מגדירים
מבנה נתונים
ADT_EXT שיהיו בו שני שדות.
ADT adt
PRIVATE_DATA private data

אפשר לכתוב מקרו שייתן מתוך מצביע ל-ADT מצביע ל-ADT_EXT (בהנחה שבאמת הועבר ADT_EXT בתור מצביע ל-ADT)

זו שיטה מאד מקובלת ב-linux kernel
 
למעלה