ronen062013 פורסם 2019 בספטמבר 26 Share פורסם 2019 בספטמבר 26 #include <iostream> using namespace std; class c { public: int x,y; c& set(int xx,int yy) { x = xx; y=yy; return *this; } }; int main() { c c1,c2; c2 = c1.set(1,1); //איך סי2 מצליח לקבל מצביע ולמה זה העתקה ולא רפרנס? //c2 = &c1; //כאן יש שגיאה וזה מובן כי סי2 הוא לא מצביע c1.set(3,3); cout<<c2.x<<c2.y<<endl; //הוכחה שסי2 הוא העתק ולא רפרנס לסי1 return 0; } סי2 הוא מקבל את המצביע this למרות שסי2 לא מסוג מצביע. איך זה עובד ולמה זה מבצע העתקה ולא רפרנס לסי1? קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2019 באוקטובר 6 מחבר Share פורסם 2019 באוקטובר 6 מישהו? קישור לתוכן שתף באתרים אחרים More sharing options...
Jabberwock פורסם 2019 באוקטובר 6 Share פורסם 2019 באוקטובר 6 המצביע this הוא מצביע למופע המחלקה אבל כשעושים כוכבית לפני הוא מעתיק את המופע. קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2019 באוקטובר 17 מחבר Share פורסם 2019 באוקטובר 17 אם הוא מעתיק את המופע אז למה הפונקציה שלו מחזירה &c ולא c? קישור לתוכן שתף באתרים אחרים More sharing options...
Jabberwock פורסם 2019 באוקטובר 17 Share פורסם 2019 באוקטובר 17 כאשר מחזירים משתנה ייחוס מאחורי הקלעים הוא מוחזר כמצביע, אין זה אומר שבפועל צריך להחזיר מצביע. לכן מבחינה תחבירית אופן השימוש הינו כלפי העצם עצמו. מטרת הייחוס הינה לחסוך בשימוש של זיכרון מחסנית ולהשתמש יותר בזיכרון ערימה. קישור לתוכן שתף באתרים אחרים More sharing options...
ralman פורסם 2019 באוקטובר 17 Share פורסם 2019 באוקטובר 17 c c1,c2; c2 = c1.set(1,1); c2 הוא אובייקט נפרד ולכן למרות שהערך המוחזר אליו מהפונקציה set הוא רפרנס מתבצעת העתקה ודריסה של אובייקט c2. על מנת ש-c2 יהיה רפרנס ל-c1 נדרש לשנות את הקוד: c c1; c& c2 = c1.set(1,1); שים לב שרפרנס חייב להיות מאותחל בהגדרתו. קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2019 באוקטובר 28 מחבר Share פורסם 2019 באוקטובר 28 ציטוט של Jabberwock כאשר מחזירים משתנה ייחוס מאחורי הקלעים הוא מוחזר כמצביע, אין זה אומר שבפועל צריך להחזיר מצביע. לכן מבחינה תחבירית אופן השימוש הינו כלפי העצם עצמו. מטרת הייחוס הינה לחסוך בשימוש של זיכרון מחסנית ולהשתמש יותר בזיכרון ערימה. 1. אז למעשה הועתק עצם לזיכרון הערה ואז הוחזר אליו ייחוס? אם הבנתי נכון, אז למה לא צריך לשחרר זיכרון דינאמית? 2. גם לא הבנתי: אם מוחזר משתנה ייחוס אז איך הוא משוכן בהצלחה ב c2 שהוא מופע רגיל ולא מצביע תודה קישור לתוכן שתף באתרים אחרים More sharing options...
Jabberwock פורסם 2019 באוקטובר 28 Share פורסם 2019 באוקטובר 28 אני רואה שעשיתי בילבול. מה שרשמתי ב-6 לאוקטובר לא היה מדויק. העתקה מתבצעת בדיוק פה: c2 = c1.set(1,1); c2 הינו מופע. הפונקציה set החזירה ייחוס. מופע יכול להעתיק משתנה ייחוס (העצם עצמו). קישור לתוכן שתף באתרים אחרים More sharing options...
ronen062013 פורסם 2019 באוקטובר 28 מחבר Share פורסם 2019 באוקטובר 28 1. כלומר מופע יכול לקבל משתנה ייחוס ולמעשה הוא יצביע על ההעתק? 2. ואם אני רוצה מצביע לערך המוחזר? by ref? מה עלי להחזיר? קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.