מחלקה שיורשת מ- Singleton

zvivered

New member
מחלקה שיורשת מ- Singleton

שלום, אנחנו רוצים להגדיר מחלקה שיורשת מ- Singleton. הבעיה היא שהבנאי שמבוצע בעת הגדרת המחלקה היורשת הוא הבנאי של Singleton עצמו (האבא) ולא של המחלקה היורשת. האם ניתן לעשות כך שהבנאי של הבן יבוצע וגם של האבא ? שימו לב, אם מדובר בהורשה רגילה, הבנאי של האבא מבוצע ואח"כ הבנאי של הבן. אולם כאן ה- new מבוצע באמצעות פונקציית מחלקה של ה-Singleton. השתמשנו במימוש הקלסי של Singleton. תודה, צביקה ורד
 

ihovav

New member
רעיון:

צרפתי דוגמאות לקוד - קובצי הדר : הקובץ של הסינגלטון מכיל קלאס סינגלטון טמפלטי ומקרו שמאפשר הגדרת קלאס כסינגלטון ע"י כתיבת המקרו בתוך הקלאס ניתן לשחק עם הקבצים ומאוד מומלץ לשחק עם הקבצים הללו וללמוד את הרעיון יש פה שימוש מאוד נחמד ברעיון המקרו בשילוב עם סינגלטון וטמפלטים את הקוד כתב המורה שלי ל CPP ב"סלע" וכל הקרדיט לו בכל מקרה - צריך לשים לב : צריך לממש מטודות כמו CCTOR, DEFAULT CTOR וכ"ו...
 

zvivered

New member
לדעתי חסר משהו. או שלא הבנתי.

שלום, תודה על התגובה. אבל איפה פה הירושה ממחלקה שהיא Singleton ? האם תוכל לצרף את singleton.h ? האם אתה מכיר אתרים שבהם ניתן למצוא רעיונות שונים בנושא ++C ? בברכה, צביקה.
 

ihovav

New member
תשובה :

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

zvivered

New member
האם הבנתי נכון ?

שלום, אני חושב שאני מתחיל להבין. בנית Template של singleton ואתה מגדיר את myclass ככזה. ההודעה האחרונה היתה בלי הקבצים. האם תוכל לצרף אותם ? האם תוכל לצרף קוד קטן שמראה איך לבצע new ל- MyClass. אם מבצעים new רגיל הקומפיילר צועק. תודה, צביקה.
 

ihovav

New member
תסתכל בהודעה הראשונה שלי

שם מצורץ קובץ בחלק הראשון שלו יש את ה SINGLETON.H ןבחלק השני יש את ה MYCLASS.H
 

zvivered

New member
אופן הגדרת קלאס חדש

שלום, צירפתי קובץ ובו אני מנסה להגדיר מצביע ל-MyClass. זה לא עובר קומפילציה. זה משהו שקשור לגישה לחבר במחלקה שהוא private. איך לדעתך מתגברים על זה ? תודה.
 

WarLord

New member
דוגמא לשימוש - חובב תקן אותי אם

אני טועה
אני חושב שאסור להגדיר ישירות את MYCALSS, לכן הבנאי נמצא בחלק הפרטי ואין גישה אליו. צריך להגדיר כמו בקובץ שצירפתי. חובב - אני אשמח לקבל פידבק.
 

ihovav

New member
הסבר :

כדי לקבל אינסטנס מהקלאס - יש שתי אפשרויות : או לקרו למטודה : Singleton<type>:GetInstance(); או ליצור מטודה בקךאס שלנו שנקראת INSTANCE שהיא תקרא למטודה הזו ותחזיר את הפויינטר
 

ihovav

New member
כמעט נכון :

קבלת המשתנה צריכה להעשות דרך הסינגלטון - אבל אתה לא צריך ליצור משתנה מהסוג הזה - אלא לקרוא למטודה אם רוצים באמת ליצור קלאס כמו שצריך - אפשר לשנות את המקרו שיכיל גם מטודה פבליק בשם GETINSTANCE והמשתמש יצטרך לממש אותה ע"י קריאה לסינגלטון או ע"י NEW עצמאי
 

zvivered

New member
עזרה בהגדרת Singleton

שלום, ניסינו לכתוב את זה קצת יותר פשוט. האם תוכל לעזור לנו מה לא נכון כאן ? כאשר מבצעים הגדרה מחדש הוא עושה new ל- singleton ולא ל- test. הבנאי של test לא מופעל. תודה מראש. צביקה.
 

ihovav

New member
הסבר :

תסתכל בקוד שצרפתי בהודעה הראשונה : הפוינטר בסינגלטון הוא מסוג "טייפ" - וה ניו נעשה על טייפ ולא על ה סינגלטון - טייפ אתה צריך ליצור אובייקט מסוג הסינגלטון ופוינטר מסוג ה טייפ - ולהשים בתוך הפוינטר את המטודה אינסטנס - שמחזירה פוינטר ל טייפ אני ממליץ לעשות את המטודה "אינסטנס" סטאטית - ואז לא צריך ליצור אינסטנס - רק לקרוא למטודה - מאחר וגם המשתנה הוא סטאטי
 
למעלה