עבור לתוכן

argv ב- c++

Featured Replies

פורסם

שלום,

כתבתי תוכנה שתפקידה לסדר אירועים ביומן(לא משנה הפרטים) יש שני סוגי תאריך שניתן להכניס ליומן האירועים המוגדרים בקלאסים שונים.

הבעיה שסוג התאריך נקבע כפרמטר לתוכנית ב-(argv).

כשאני צריכה לשבץ תאריך איך אני אדע באיזה קונסטרקטור להשתמש??

האי ככה אי אפשר לעשות::

if

(argv[1]==-regular

)

תודה רבה על העזרה....

פורסם

השאלה היא איך אפשר ליצור אובייקטים מקלאסים שונים כתלות ב- string מסוים?

אם לשני הקלאסים יש הורה משותף אפשר לעשות משהו כזה -

CParent *pObj = NULL
if (strcmp(argv[1], "type1")==0)
pObj=new Child1()
else if (strcmp(argv[1], "type2")==0)
pObj=new Child2()

פורסם
  • מחבר

ככה בדיוק עשיתי..

הבעיה שהוא טוען שהוא לא מכיר את argv

פורסם

main(int argc, char **argv)

פורסם

אם הם מוצגים בצורה שונה, למשל אחד קצת (3.9.88) ואחד ארוך(3 ספטמבר 88) אז את יכולה גם לבדוק לפי הARGC שסופר כמה ארגומנטים יש לך.

ואת צריכה לרשום :

int main(int argc, char *argv[])

פורסם
  • מחבר

אבל הכל נעשה במחלקה כלשהי שאחראית על האירועים איך המיין יכולה לעביר לה מידע על סוג ה-argv?

פורסם

תעביר לה את זה ל-constructor ושהיא תשמור את זה במשתנה פרטי.

פורסם

את יכולה לחפש קצת על design pattern שנקרא factory. זה נשמע לי כמו מה שאת מחפשת.

פורסם

הדרך הטובה לפתור כזה מצב.

מבחינת DESIGN נכון אסור ליצור מצב שהאוביקטים השונים מודעים אחד לשני והרבה יותר טוב שגם ה MAIN לא יהיה מודע לסוגי האוביקטים השונים.

במצב כזה בדרך הכי טוב לעבוד ככה.

כל ה CLASSים ממשים ממשק כללי (וכמובן יורשים מאב כלשהו שאינו ממומש.

ישנו CLASS אחד (FACTORY) שתפקידו להחליט איזה CLASS הוא אמור לאתחל לפי מבנה נתונים שיושב אצלו ואיזה שהוא מפתח (למשל ה STRING שמתקבל ב ARC של התוכנית - כמו אצלך)

על מנת לאפשר גמישות מירבית ולמנוע מצב שבו אם רוצים להוסיף או לעדכן CLASS מסויים צריך לשנות קבצים קיימים כל CLASS דואג (על ידי בלוק סטטי) לרשום את עצמו במבנה הנתונים של ה FACTORY.

וה MAIN פשוט מפיעל את ה FACTORY כשהו שולח את הארגומנט - וה FACTORY מחזיר לו את האוביקט המתאים (לפוינטר של CLASS האב)

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

פורסם
  • מחבר

זאת הבעיה שאסור לי להוסיף שדות פרטיים חוץ מכאלה שנתונים לי כבר... ואין שם שדה כזה..

פורסם

גלובלי?

פורסם
  • מחבר

מה גלובלי המשתנה? לא.... ממש לא אמרתי שאני לא יכולה להוסיף שדות לקלאס.

פורסם

FACTORY זה הכל

ארכיון

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

דיונים חדשים