פורסם 2010 ביולי 2015 שנים רציתי לדעת אם יש אפשרות לעשות overload לפונק' ב-C ? נניח יש לי פונק' הכי פשוטה שיש אפילו ברמת סכימה של מספרים, ואני רוצה שכל פעם היא תסכום סכום אחר של מספרים, אז נכון שאני יכול לקלוט מערך או להשתמש בממשק של EOF פנימי או משהו כזה, אבל אני מדבר ברמה של ממש: sum(2,3,4) מול נניח: sum(2,3,4,5,6) הצעות ? אשמח להצעות אחרות אם אי אפשר, שיוכלו לתת פתרון הולם אחר תודה !! ;D
פורסם 2010 ביולי 2015 שנים הרעיון של overloading נכנס רק ב-++C.אפשר ב-C להעביר מספר משתנה של ארגומנטים לפונקציה באמצעות va_arg (ככה עובדת printf לדוגמה).http://www.cppreference.com/wiki/c/other/va_arg
פורסם 2010 ביולי 2015 שנים מחבר ואז אני יכול לייצר ממשק ב-main של פונק' שניתן להשתמש בהם כ- overload function כמו printf ? או שעדיין יהיו בעיות?
פורסם 2010 ביולי 2015 שנים לא הבנתי מה הכוונה. אם אתה רוצה לכתוב פונקציה שתעבוד כמו printf, אז קרא את הלינק שנתתי לך ותשתמש ב-va_arg.
פורסם 2010 ביולי 2015 שנים מחבר אני רק רוצה לוודא שתפסתי את הקונספט... int sum( int num, ... ) { int answer = 0; va_list argptr; va_start( argptr, num ); for( ; num > 0; num-- ) { answer += va_arg( argptr, int ); } va_end( argptr ); return( answer ); } int sum( int num, ... ) הכרזה על פונק' שמחזירה int ומקבלת רק int-ים. האם אני יכול להוסיף עוד טיפוסים שונים מלבד int-ים ? int answer = 0; די ברור.. אתחול משתנה לוקלי... va_list argptr; הצהרה על argptr (שם שמור) כמצביע על רשימת ארגומנטים ? va_start( argptr, num ); תחילת השימוש ב-va_arg שלי כאשר הוא מקבל את ה- argptr שמצביע על הרשימה ואת הnum-ים ? va_arg( argptr, int ); הבנתי שאני אמור לחזור על זה כמה פעמים שאני צריך, אבל מה בדיוק אני עושה עם זה ? הבנתי בדוגמא בלינק שאני משתמש בזה לסכימה אבל איך זה הולך ? הוא כל קריאה מתקדם לארגומנט הבא ברשימה ?? va_end( argptr ); השורה הזאת, הבנתי שמתיחסת למצב שבו סיימתי את הקריאה לארגומנטים שלי, אבל מה ממש היא עושה? ממש תודה על העזרה וההתיחסות !!
פורסם 2010 ביולי 2015 שנים לא הבנת נכון חלק מהדברים. תקרא שוב את הלינק שנתתי לך, כי הוא מסביר מה בדיוק עושים va_start, va_end וכו'.עם קצת גוגל גם אפשר למצוא הסברים בעברית.http://vlib.eitan.ac.il/cplusplus2/guide2-18.html
פורסם 2010 ביולי 2015 שנים מחבר הלינק באנגלית דווקא היה לי ברור, רק לא הבנתי כמה דברים כמו אם אני יכול לייצר לי פונק' שתוכל לקלוט במקום סדרה של מספרים, סדרה נניח של מספר ואז אות וכן הלאה בסדרה לא מוגבלת. כי בדוגמא מראים את זה על פונק' בסיסית של sum של int-ים. אני יודע שאם אני רוצה לעשות 'overload' נניח פעם אחת על סכימה של int-ים ופעם אחת על נניח הצגת מחרוזת מאותיות מבוזרות שנקלטות (על אותו function name מן הסתם) אז אני אפעיל פעמיים את אותו הפורמט עם גוף פונק' שונה, אבל שוב איך אני משלב כמה פרמטרים ביחד ? אני נניח יכול לכתוב במקום:int sum( int num, ... ) את:int sum(int num , char c ,...)?? :-\ ???
פורסם 2010 ביולי 2015 שנים קודם כל, אין קשר בין הטיפוס של הארגומנטים הרגילים (בדוגמה שלך num ו-c) והארגומנטים הנוספים (מה שנכלל תחת ה-"...").כשאתה כותב את הפונקציה, אין לך באמת דרך לדעת מה הטיפוסים של הארגומנטים הנוספים, או כמה כאלה בכלל יש. הדרך היחידה לדעת היא פשוט להניח תמיד שהם מטיפוס מסוים, או שמי שקורא לפונקציה יעביר לך את המידע הזה באופן כלשהו.בלינק הראשון שנתתי לך יש אפילו דוגמה למימוש בסיסי ל-printf. שים לב שהפונקציה מחליטה כמה איברים יש ברשימת הארגומנטים לפי אורך המחרוזת format, והיא יודעת מה הטיפוסים שלהם רק לפי התוכן של format.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.