Dolmiti פורסם 2018 בינואר 10 Share פורסם 2018 בינואר 10 מדוע התכנית הראשית עובדת? איך הקומפיילר מפרש אותה? #include <iostream> using namespace std; class FooClass { private: int m_number; public: FooClass(int n) { m_number = n; } int getNumber() const { return m_number; } }; void func(FooClass c) {cout << "In func: c.m_number=" << c.getNumber() << endl;} int main() { func((FooClass)9); return 0; } קישור לתוכן שתף באתרים אחרים More sharing options...
ralman פורסם 2018 בפברואר 1 Share פורסם 2018 בפברואר 1 התוכנית מפרשת את השורה: func((FooClass)9); כהמרה של אובייקט const int לטיפוס FooClass. מכיוון שקיים בנאי במחלקה המאפשר יצירה של FooClass מתוך int הוא נבחר. קישור לתוכן שתף באתרים אחרים More sharing options...
pavel korolin פורסם 2018 בפברואר 4 Share פורסם 2018 בפברואר 4 אני חושב שמה שעושה את העובדה היא העובדה שהקומפיילר מסתכל על הפונקציה void func(FooClass c) מבין שהוא צריך לקבל אוביקט של fooClass מסתכל על איך בונים אוביקט כזה - רואה שהוא יודע לבנות אוביקט fooCkass מהערך 9 -- חשוב לציין שגם אם תשלח 'a' הוא יחזיר 97 מאותה הסיבה זה נקרא converting cpnstruvtor http://en.cppreference.com/w/cpp/language/converting_constructor בכל מקרה הוא יבנה אוביקט זמני ידפיס את הערך וכאשר הוא יצא מהפונקציה הוא יהרוס את האוביקט (תוסיף הדפסות ותראה) נ.ב אם תוסיף לפני הבנאי שלך את המילה explicit - התוכנית לא תתקמפל קישור לתוכן שתף באתרים אחרים More sharing options...
Dolmiti פורסם 2018 בפברואר 6 מחבר Share פורסם 2018 בפברואר 6 תודה רבה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.