עבור לתוכן
  • צור חשבון
  • מי אנחנו?

    שלום אורח/ת!

     
    שים לב - על מנת להשתתף בקהילה שלנו, להגיב ולפתוח דיונים חדשים, עליך להצטרף כחבר רשום.

    החברים שלנו נהנים מיתרונות רבים, כולל היכולת להשתתף בדיונים, להנות מהגרלות ומבצעים לחברי האתר, ולקבל מידי שבוע את התכנים הבולטים שלנו ישירות במייל.

    לא אוהבים שמציקים לכם במייל? ניתן להירשם לאתר אך לוותר על הרישום לעידכוני המייל השבועיים.

Dolmiti

C++| המרות מרומזות בבנאית העתקה

Recommended Posts

מדוע התכנית הראשית עובדת? איך הקומפיילר מפרש אותה?

#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;
}

 

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

התוכנית מפרשת את השורה: 

func((FooClass)9);

כהמרה של אובייקט const int לטיפוס FooClass.

מכיוון שקיים בנאי במחלקה המאפשר יצירה של FooClass מתוך int הוא נבחר.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אני חושב שמה שעושה את העובדה היא העובדה שהקומפיילר מסתכל על הפונקציה 

void func(FooClass c)

מבין שהוא צריך לקבל אוביקט של fooClass 

מסתכל על איך בונים אוביקט כזה - רואה שהוא יודע לבנות אוביקט fooCkass מהערך 9 -- חשוב לציין שגם אם תשלח 'a' הוא יחזיר 97 מאותה הסיבה 

זה נקרא converting cpnstruvtor 

 http://en.cppreference.com/w/cpp/language/converting_constructor

 

בכל מקרה הוא יבנה אוביקט זמני ידפיס את הערך וכאשר הוא יצא מהפונקציה הוא יהרוס את האוביקט (תוסיף הדפסות ותראה)

 

נ.ב

אם תוסיף לפני הבנאי שלך  את המילה explicit  - התוכנית לא תתקמפל 

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הצטרפ/י לדיון

בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.


×
  • צור חדש...
Back to top button
Close
Close