הנושא לא יכול להיות מוקפץ יותר

משתנים סטטיים זה טוב רק במקרה שיש לך בדיוק instance אחד של הקלאס. אם יש לך שני אובייקטי father במערכת (ולכל אחד inner שלו) יהיה לך בלאגן גדול כי שניהם יחלקו את אותו הוקטור הסטטי המשותף. פתרון אפשרי הוא שהקלאס הפנימי יחזיק מצביע ל"אבא" החיצוני שלו, ושהאבא יגדיר אותו כ friend. תעביר לו בקונסטרקטור מצביע ל this של האבא:
class outer { class inner { inner(outer& his_outer) : my_outer(his_outer) { } private: outer& my_outer; }; friend class inner; inner in; public: outer() : in(*this) { } };​
לא קימפלתי ולא בדקתי. אם אתה רוצה ש inner כמובן שאפשר גם לעשות design שבו לא צריך התחכמות כזו.
 

ASP zone

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

הוא מרסק לי את התוכנית. באופן עקרוני צריך להיות איזה Design Pattern בשביל הדברים האלו לא? רגע אתה בעצם מציע לקחת reference במקום פוניטר. רעיון נחמד. אבל אני יעדיף להמנע מזה אם יש design יותר טוב. אני צריך להפנות את השאלה לפורום הנדסת תוכנה?
 

ASP zone

New member
יש לי מחלקה של דמות

ובתוכה יש לדמות תכונות בסיס(חוזק, זריזות, כושר, תבונה, חוכמה וכריזמה). לכל תכונה יש Modifier או בעברית מתאם. המתאם מחושב ככה:
(iScore - 10 - (iScore Mod 2)) / 2​
עכשיו כל מתאם משפיע על מיומנויות (Skills. כמה טוב הדמות פורצת מנעולים, קופצת, מבצעת סלטות באויר ומכינה שקשוקה). יש את גלגולי ההצלה, שגם הם מושפעים מחלק מהמתאמים. גלגולי ההצלה הם: Reflex, Will, Fortitude. המתאמאים שלהם הם:
Reflex - זריזות Will - חוכמה Fortitude - כושר​
מטילים גלגולי הצלה כשאר אתה קופץ אינסטנקטיבית כדי להתחמק מקסמים, להתנגד לרעל, גז מרדים וכו, לא עקרוני. בקיצור אני צריך שהמתאמים יהיה זהה בכל הדברים כאן. עכשיו הכל צריך להתחשב בכך שאסור שיהיה coupling. כי זה מסבך,זה דופק את המודלאריות וכו. לכן פוינטרים לא באים בחשבון. נסיתי לעשות משהו עם Observer וCommand משולב, לא הלך. אז עברתי לעיצוב של מחלקות פנמיות, גם לא הולך. למה אין בC++ פוינטר למחלקת אב או סוג כל שהוא של casting. אגב גם ירושה לא באה בחשבון כאן. אני גם לא יכול להכליל הכל באובייקט אחד. זה יהיה אובייקט גדול מדי.
 

ASP zone

New member
יש לי רעיון

הוא קצת אונס את השפה (אולי) אבל יכול להיות נחמד.
#include <iostream> using namespace std; class a { public: static int *x; static void doit() { *x = 500; } class inner { public: int xxx; int yyy; void call_do() { x = &xxx; doit(); cout << *x << endl; } void call_do2() { x = &yyy; doit(); cout << *x + 10; } }; inner obj; }; int *a::x; int main() { a myObj; myObj.obj.call_do(); myObj.obj.call_do2(); cin.get(); return 0; }​
מה אתה אומר?
 

selalerer

New member
איכס ../images/Emo6.gif

למה שהשיטות של המחלקות הפנימיות לא קבלו כפרמטר את המידע שהן צריכות?
 

ASP zone

New member
כי זה יוצא צמידות גבוהה מדי.

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

ASP zone

New member
אוקי עשיתי עם coupling

ויצא טוב, אבל אני לא רוצה. זה פחות טוב מבחינה עיצובית.
 

Moridin

New member
יש לך

מחלקה A, שמכילה אובייקט ממחלקה B. אתה רוצה שלשניהם יהיה מידע משותף. למה אתה שם אותו ב-A ולא ב-B? אני מקווה שאתה מבין למה הרעיון שלך, להגדיר את הוקטור כסטטי, הוא בעייתי.
 

ASP zone

New member
זה ברור שהוא לא טוב

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