פורסם 2006 במרץ 2819 שנים למה כשיוצאים מהפונ' הנתונים לא נשמרים?struct WindowPoints { int xCoor; int yCoor; };void userWinCoorInput(WindowPoints winPointA, WuindowPoints winPointB);int main(){ WindowPoints winPointA, winPointB; userWinCoorInput(winPointA, winPointB); return 0;}//User window coordinates inputvoid userWinCoorInput(Points winPointA, Points winPointB){ cout << endl << "A Window point X coor: "; cin >> winPointA.xCoor; cout << "A Window point Y coor: "; cin >> winPointA.yCoor; cout << "B Window point X coor: "; cin >> winPointB.xCoor; cout << "B Window point Y coor: "; cin >> winPointB.yCoor;}
פורסם 2006 במרץ 2819 שנים הסיבה לזה היא שבקריאה לפונקציה לא המשתנים עוברים לפונקציה, אלא רק הערכים שלהם.כדי לעשות מה שאתה רוצה אתה צריך להעביר את הפרמטרים by reference או by pointer.
פורסם 2006 במרץ 2819 שנים כדי להפוך את הפונ שתקבל פרמטרים BY REF:void userWinCoorInput(WindowPoints &winPointA, WuindowPoints &winPointB);הוספתי & כדי שהפרמטרים הנ"ל יהיו BY REF. כעת אתה יכול לשנות את הערכים של המשתנים בתוך הפונ, והם ישמרו בתוך הזיכרון של המשתנים המקוריים שלך(שבתוך הMAIN).
פורסם 2006 במרץ 2819 שנים ועוד הערה קטנה:אל תעבירו struct-ים ו-class-ים by value (כלומר בלי &).הסיבה היא שהעברה כזו גוררת העתקה מיותרת של הקלאס.אם מעבירים עם &, אז הפונקציה פשוט מקבלת מצביע לאותו קלאס.אם אתם בכל זאת מתכננים לשנות את הקלאס בתוך הפונקציה, אבל לא רוצים שהוא ישתנה בחוץ, אז תדאגו להעתיק אותו בתוך הפונקציה.
פורסם 2006 במרץ 2819 שנים מחבר אוקי תודה על התשובות המהירות. שניצל האם תוכל להביא דוגמה איך נכון לעשות ואיך לא נכון, היני חדש בתחום.תודה
פורסם 2006 במרץ 2819 שנים אוקי, נניח הגדרתי בן אדם (סתם הגדרה טפשית לדוגמה):struct person { int age; int height;}ואני רוצה להגדיר פונקציה שמדפיסה אותו, לדוגמה:void print_person(const person& p) { cout << "age: " << p.age << ", height: " << p.height << endl;}שים לב שהגדרתי את הפונקציהvoid print_person(const person& p)ולאvoid print_person(person p)למה?כי במקרה הראשון, המחשב פשוט מעביר מצביע לאותו אובייקט p לתוך הפונקציה.במקרה השני, המחשב יוצר עותק חדש של p, ואותו הוא מדפיס. התוצאה זהה, אבל זה סתם גורר יצירה והעתקה מיותרת של אובייקט.ואם האובייקט הוא יותר מורכב (נניח זה struct שמכיל יותר מ-2 משתנים, או שזה קלאס עם פונקציית אתחול מורכבת) אז זה עולה למחשב הרבה יותר.ולמה השתמשתי ב-const?כי בכל זאת, הפונקציה לא אמורה לשנות את האובייקט, אלא רק להדפיס אותו. במקרה השני אין צורך ב-const, כי בכל מקרה הפונקציה מעתיקה את האובייקט ולא נוגעת במקורי.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.