לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #5  
ישן 25-03-2005, 11:31
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
על הורשה למדת?
בתגובה להודעה מספר 4 שנכתבה על ידי hiya שמתחילה ב "לא הבנתי את החלק הזה: [CODE]..."

כדי שההסבר יצליח, אתה צריך לדעת באופן כללי איך עובד OO ב-CPP, וליתר דיוק: איך
פועלים בנאים, ואיך פועל הורשה.
כאשר יש לנו מחלקת בסיס b וממנה יורשות מחלקות d1,d2,d3,... ואנחנו רוצים שהבנאי
של מחלקה d2, לדוגמה, יבצע קוד מסויים בנוסף לביצוע הקוד של הבנאי של מחלקת
הבסיס b, אנחנו נכתוב כך בערך:

קוד PHP:
 class b
  
{
  private:
  ...
  protected:
  ...
  public:
      
b(int ifloat fchar c)
      {
      ...
      }
  ...
  }
  
  
  class 
d1 : public b
  
{
  private:
  ...
  protected:
  ...
  public:
      
d1(int ifloat fchar cdouble dlong l) : b(ifc)
      {
      ...
      }
  ...
  } 

שים לב לחלק הזה:
d1(int i, float f, char c, double d, long l) : b(i, f, c)
{
/* b(i, f, c); */
...
}
יכלנו לכתוב משהו בסגנון השורה שנמצאת בהערה במקום החלק המודגש, אבל יש לנו
שיטה אחרת לקרוא לבנאי של מחלקות האב שלנו - סימן נקודתיים אחרי הבנאי, שם הבנאי
של מחלקה האב(שזה בעצם שם מחלקת האב) ופרמטרים.
מה שקורה בקוד שלך הוא ש-CPP יש טריק שמאפשר להתייחס למשתנים במחלקה באופן
זהה(לבנאי של מחלקת אב) - כלומר, להתייחס אליהם כאל פונקציות(בנאים) ולקבוע להם
ערך כאילו מדובר בפרמטר לפונקציה.
האם הקוד הזה עדיף מבחינה טכנית? אין לי מושג. אולי יש איזו אופטימיזציה אם משתמשים
בזה, ואולי לא. מבחינת משמעות, זה זהה לאם היו כותבים בתוך גוף הפונקציה את השורה:
קוד PHP:
 m_nSize sizeof(t1); 




נ.ב.
אולי יש לי טעויות סמנטיות טפשיות, אבל לא נגעתי ב-CPP בפרט או בתכנות בכלל כבר
המוווון זמן, אז תסלחו לי
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 25-03-2005, 13:26
צלמית המשתמש של Jarvis
  Jarvis Jarvis אינו מחובר  
 
חבר מתאריך: 18.01.03
הודעות: 7,325
קח בחשבון שרק עכשיו למדתי את זה
בתגובה להודעה מספר 7 שנכתבה על ידי AlexKarpman שמתחילה ב "מי? מה? מו? לא הבנתי :)"

בעיקרון כל בנאי של כל מחלקה יכול לאתחל את הנתונים כבר ברגע שהוא מוגדר, ועוד לפני שקוראים לו. כאן מגיע העניין של הנקודותיים, שמאפשר לנו לאתחל את הנתונים עוד לפני שנכנסנו לבנאי. קוראים לזה INIT LINE (ולא כמו שרשמתי מקודם).

מתי אפשר להשתמש בזה ? תמיד, והיתרון הוא שנכנסים לבנאי וכבר רוב המשתנים מאותחלים, וגם שזה יחסית קריא וחוסך קוד.
מתי חייבים להשתמש בזה ?
א. אם יש לנו אובייקט מוכל שאין לו בנאי ריק. הבנאי של אוביקט שמוכל בתוך אוביקט אחר יופעל תמיד לפני הבנאי של האובייקט המכיל. אם איו בנאי ריק צריך להגדיר בעצמנו את האתחול של הבנאי. ומשום שכל זה צריך להיעשות לפני שנכנסים לבנאי - נעשה זאת בINIT LINE :

קוד:
class Line { Point p1,p2; public: Line (int x1, int y1, int x2, int y2) : p1(x1,y1), p2(x2,y2) {} }

ב. אם יש לנו הורשה, המצב דומה - קוראים לבנאי של האב לפני הבנאי של הבן.
זו הדרך היחידה לאתחל אותם const ג. אם יש לנו משתנים שהם
,


נערך לאחרונה ע"י Jarvis בתאריך 25-03-2005 בשעה 13:31.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 09:08

הדף נוצר ב 0.06 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר