ABA


"התחלתי לעשות לעצמי הסבה מC לC++, כנסו שאלה :P"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15831 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15831
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:01   21.04.10   
אל הפורום  
  התחלתי לעשות לעצמי הסבה מC לC++, כנסו שאלה :P  
 
   מה הסיבה שבהורשה מרובה נוצר מקום נוסף בזכרון?
אני אתן דוגמה כי בטח לא הייתי כזה ברור:

class Base{
public:
int var;
};
class sub1:public Base
{

};
class sub2:public Base
{
};
class subsub:public sub1,public sub2
{
public:
void SetShow()
{
subvar=4;
printf("%d\n",subvar);
printf("%d\n",sub2::var);
sub2::var=5;
printf("%d\n",subvar);
printf("%d\n",sub2::var);
}
};


כאן למעשה הקוצה מקום בזכרון עבור כל אחד מהvarים.
בC# זה לא ככה.. מה ההגיון בזה שעשו את זה ככה בC++?

s221x538s33s226sgbds33


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  כי הירושה היא סטטית פאביו ג'וניור 21.04.10 18:07 1
     אווקי תודה:) ronen333  21.04.10 18:31 2
     הבנתי שאם עושים את זה צריך להשתמש גם במפרק ווירטואלי ronen333  21.04.10 21:32 3
         צריך אבל אני כבר לא זוכר למה :\ (פירוט) פאביו ג'וניור 21.04.10 22:31 4
             תגובה לעניין Net_Boy  22.04.10 12:53 6
             תודה רבה על התגובה המושקעת =] ronen333  22.04.10 15:14 8
         אני האמת היא לא התעמקתי בתגובה של פאביו, אבל אסכם ldan192  22.04.10 00:13 5
             חחח אז תקרא את התגובה שלי כי בסוף דיי מופנת שאלה אליך ח פאביו ג'וניור 22.04.10 14:25 7
                 לא בטוח שהבנתי את השאלה. מתי בדיוק אתה אומר ldan192  22.04.10 20:47 11
                     אממ פאביו ג'וניור 22.04.10 21:24 12
                         לא, זו לא הסיבה. הסיבה היא מה שרשמתי בתגובה שלי. ldan192  23.04.10 10:51 14
  שאלה נוספת: ronen333  22.04.10 18:24 9
     דוגמה למקום שזה שימושי Sn00py  22.04.10 20:34 10
         בהעמסת אופרטורים? ronen333  23.04.10 09:53 13
             כי לפעמים יש אופרטורים בעלי מכנה משותף. ldan192  23.04.10 10:55 15
                 עדיין לא כל כך הבנתי, תוכל לתת דוגמאת קוד? ronen333  23.04.10 13:10 16
                     בקיצור צא מקו מחשבה VeNom  23.04.10 13:24 17
                         חחח אבל זה נכון ronen333  23.04.10 13:34 18
                         ממש לא נכון Net_Boy  23.04.10 13:48 19
                             להפך, ירושת יהלום נובעת כאשר משתמשים ב-virtual ldan192  23.04.10 14:15 21
                                 מה שרשמת זה הפיתרון לבעיית היהלום Net_Boy  23.04.10 14:52 22
                                     לא לא לא... הפתרון עצמו הוא ירושת היהלום ldan192  23.04.10 15:05 24
                                         אנחנו סתם טוחנים מים אנחנו מדברים בדיוק על אותו הדבר Net_Boy  23.04.10 15:09 25
                                             חחח כן... סתם קצר בתקשורת :) בכל מקרה, כל מי שאומר ldan192  23.04.10 15:11 26
                             אממ מה הסיבה אז שfriend פותר את זה? ronen333  26.04.10 12:39 27
                                 אתה משתמש ב friend שפונקציה גלובלית רוצה לגשת ל Net_Boy  27.04.10 01:28 28
                                     כן אבל למה הדרך השניה היא שגויה? ronen333  27.04.10 01:30 29
                         נכון ולא נכון. קודם כל, הורשה מרובה דורש רמה של גאונות ldan192  23.04.10 14:12 20
                             יש עדיין המון דברים שימשיכו להכתב ב C ו C++ Sn00py  23.04.10 15:01 23

       
פאביו ג'וניור

   18:07   21.04.10   
אל הפורום  
  1. כי הירושה היא סטטית  
בתגובה להודעה מספר 0
 
   אם אתה רוצה שיהיה ירושה של מה שנקרא "מעויין" או "ריבוע" כאילו שהמחלקת בסיס זהה אז אתה צריך להשתמש בירושה וירטואלית - אחרת לכל מחלקות הבסיס מוקצה מקום משלהם כולל ליורשים מהם...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:31   21.04.10   
אל הפורום  
  2. אווקי תודה:)  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   21:32   21.04.10   
אל הפורום  
  3. הבנתי שאם עושים את זה צריך להשתמש גם במפרק ווירטואלי  
בתגובה להודעה מספר 1
 
   זה נכון?
אשמח להסבר למה צריך, ואיך.. פשוט להוסיף VIRUTAL לפני ~שם מחלקה ?

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
פאביו ג'וניור

   22:31   21.04.10   
אל הפורום  
  4. צריך אבל אני כבר לא זוכר למה :\ (פירוט)  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 21.04.10 בשעה 22:35 בברכה, פאביו ג'וניור
 
אבל ככה הנראה שכן..
תיראה מה שקורה שבC++ בניגוד לC# או לJAVA הקישור הוא סטטי.. מה שאומר שאם תעשה ככה:

class a
{
public:
void printme() {cout<<"hello"<<endl;}
};

class b : public class a
{
public printme() {cout<<"bye"<<endl;}
}

void main()
{
a* tmp = new b;
tmp->printme();
delete tmp;
}


מה שיודפס לך זה hello ולא bye כמו בשפות עם קישור דינמי..
מה שעושים בשביל זה זה משתמשים בvirtual..
עכשיו למה משתמשים בדיסטרקטור וירטואלי? כי אם תשים לב בשורה האחרונה שאני משחרר את tmp איזה דיסטרקטור יופעל בC++? הדיסטרקטור של a..
בדיוק בשביל זה עושים דיסטרקטור וירטואלי..
איך הוא עושה את זה? ברגע שיש שימוש בפונקציה וירטואלית הוא יוצר במחלקה משתנה שקוראים לו vfptr.. שמצביע לvftable (virtual function table) שמצידה מכילה את הכתובות האמיתיות שיש להפעיל.. ככה C++ ממש קישור וירטואלי (סתם לידע כללי)
קח כלל אצבע שמתאים לרוב המקרים: תמיד שמתעסקים עם ירושה כאשר הדיסטרקטור לא טריוויאלי משתמשים בדיסטרקטור ויראולי (חח גם יצא חרוז).

בכל מקרה שאתה עושה ירושה בצורה הזאת אתה בטוח תשתמש בפולימורפיזם... מה שיקרה זה שברגע שתמחוק פויינטר מסוג base שמצביע בתאכלס לsubsub הוא לא ידע למחוק את subsub כמו שצריך..

אני זוכר גם שאם לא עושים ירושה פרק וירטואלי בירושה וירטואלית (אפילו אם המפרק ריק!) יש מצב לקריסה.. אני חושב שC++ עלול לנסות למחוק את 2 מופעי הבסיס... ואז אחרי שהוא שיחרר אחד לגשת לאותו מקום בזיכרון ולנסות לשחררו שוב עלול לגרום לקריסה.. למה זה קורה? אני כבר לא זוכר... איפה עידן הוא בטח יודע עם כל הקיראות המרובות שלו בקומפיילרים של C++ ?

אה וכן מבחינה פרקטית אתה פשוט מוסיף virtual לפני ~שם המחלקה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   12:53   22.04.10   
אל הפורום  
  6. תגובה לעניין  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   15:14   22.04.10   
אל הפורום  
  8. תודה רבה על התגובה המושקעת =]  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   00:13   22.04.10   
אל הפורום  
  5. אני האמת היא לא התעמקתי בתגובה של פאביו, אבל אסכם  
בתגובה להודעה מספר 3
 
ב-2 מילים:
נניח כי B יורש מ-A.
מותר לך לבצע דבר כזה:
A* a = new B();
הטיפוס הסטטי של a הוא A והדינמי הוא B.

מכיוון שכל המתודות הן סטטיות ב-++C, ברגע שאתה רושם delete a; מתבצע הדיסטרקטור לפי הטיפוס הסטטי, כלומר A.
ברגע שאתה מוסיף virtual, בעזרת (תורה יפהפייה בפני עצמה שמאחורי הקלעים) מופעל הדיסטרקטור של הטיפוס הדינמי.

שים לב כי קונסטרקטור לא יכול להיות וירטואלי!
בשונה מ-Java ו-C#, אין מעבר כפול באתחול (פעם בערכי NULL ואח"כ בהשמות) ולכן לא יתכן שיאותחל האב לפני שהבן ידוע.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
פאביו ג'וניור

   14:25   22.04.10   
אל הפורום  
  7. חחח אז תקרא את התגובה שלי כי בסוף דיי מופנת שאלה אליך ח  
בתגובה להודעה מספר 5
 
   אליך חחח :P


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   20:47   22.04.10   
אל הפורום  
  11. לא בטוח שהבנתי את השאלה. מתי בדיוק אתה אומר  
בתגובה להודעה מספר 7
 
שתהיה התרסקות? אם הדיסטרקטור לא וירטואלי?


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
פאביו ג'וניור

   21:24   22.04.10   
אל הפורום  
  12. אממ  
בתגובה להודעה מספר 11
 
   כן..
כאילו אני לא זוכר בדיוק למה..
הוא באמת ינסה למחוק את 2 מחלקות הבסיס ובגלל זה התוכנית תעוף?
אני כבר לא ממש זוכר איך עובדת ירושה וירטואלית מאחורי הקלעים... זאת השאלה נכונה יותר :P והאם תיהיה התרסקות כי הוא ינסה למחוק את 2 מחלקות הבסיס ואם כן אז למה שדיסטרקטור וירטואלי ימנע את זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   10:51   23.04.10   
אל הפורום  
  14. לא, זו לא הסיבה. הסיבה היא מה שרשמתי בתגובה שלי.  
בתגובה להודעה מספר 12
 
אין שום סיבה שיתרסק. ברגע שהקונסטרקטור הוא סטטי אז הוא משתמש בקונסטרקטור הסטטי בלבד. זאת אומרת שיתכנו דליפות זכרון.
אולי אתה מתכוון לדברים אחרים... כמו התעללות עם interpret_cast. אז כן, הוא מתייחס ל-vfptr לא נכון ואז דברים יכולים להפוך מוזרים

תריץ למשל את קטע הקוד הבא ותראה מה אתה רואה:



#include <iostream>
using namespace std;

class A {
public:
A() { x = new int; *x = 3; }
~A() { delete x; }
int *x;
};

class B : A {
public:
B() { y = new int; *y = 4; }
~B() { delete y; }
int *y;
};

int main() {
int *ptr;
B* b = new B();
ptr = b->y;
A* a = (A*)b; // A regular upcasting
delete a;
cout << *ptr << endl;
return 0;
}

(באותה מידה היה אפשר לרשום A* a = new B() ואז ptr = ((B*)a)->y;)


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:24   22.04.10   
אל הפורום  
  9. שאלה נוספת:  
בתגובה להודעה מספר 0
 
   המודיפיר friend, די נובע מתכנון לא נכון לא?
למה שארצה לגשת למשתנים שהם private במחלקה אחרת עם מטודה?


אפשר דוגמה או משהו? כי אני לא באמת רואה לזה שימוש...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   20:34   22.04.10   
אל הפורום  
  10. דוגמה למקום שזה שימושי  
בתגובה להודעה מספר 9
 
   העמסת אופרטורים(לפעמים),
וטסטים!
מחלקה שבודקת לך מתודות פרטיות במחקלה אחרת זה מקרה נפוץ ביותר.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   09:53   23.04.10   
אל הפורום  
  13. בהעמסת אופרטורים?  
בתגובה להודעה מספר 10
 
   ערכתי לאחרונה בתאריך 23.04.10 בשעה 09:59 בברכה, ronen333
 
למה לא פשוט לעשות את זה static כמו בC# וזהו?


למה זה לא יכול להיות פשוט חבר מחלקה בלי FRIEND, תחת PUBLIC?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   10:55   23.04.10   
אל הפורום  
  15. כי לפעמים יש אופרטורים בעלי מכנה משותף.  
בתגובה להודעה מספר 13
 
יתכן שתרצה להשוות רק מה שבמחלקת השורש המשותף שיושוו.
אז אין צורך שתעתיק מימוש מספר פעמים, פשוט אתה מוסיף אותו כחבר.

בסה"כ, אין הבדל משמעותי. ברגע שאתה רושם friend זה מקביל לזה שאתה שם אותו כמתודה בפני עצמה, רק שהפעם אתה מקבל באיבר ראשון את ה-this (במקום שזה יקרה מאחורי הקלעים).


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:10   23.04.10   
אל הפורום  
  16. עדיין לא כל כך הבנתי, תוכל לתת דוגמאת קוד?  
בתגובה להודעה מספר 15
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   13:24   23.04.10   
אל הפורום  
  17. בקיצור צא מקו מחשבה  
בתגובה להודעה מספר 16
 
   שרוב הדברים שיש לך ב c++ ואין לך בשפות חדשות כמו c#..כמו משתני friend והורשה מרובה וכו' הם פשוט מאוד רוב הזמן נובעים מתכנון לא טוב ועובדה שלא צריך אותם ואפשר להסתדר בלעדיהם..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:34   23.04.10   
אל הפורום  
  18. חחח אבל זה נכון  
בתגובה להודעה מספר 17
 
   ערכתי לאחרונה בתאריך 23.04.10 בשעה 13:44 בברכה, ronen333
 
הסיבה שהורידו למשל הורשה מרובה זה מבעיות טכניות ותכנוניות בהכנת פרויקטים גדולים. זה למה SUN המציאו INTERFACE.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   13:48   23.04.10   
אל הפורום  
  19. ממש לא נכון  
בתגובה להודעה מספר 17
 
   ערכתי לאחרונה בתאריך 23.04.10 בשעה 13:52 בברכה, Net_Boy
 
שעושים העמסה לאופרטור בינארי (משמע מקבל 2 אופרנדים)
הדרך הנכונה לעשות זאת היא באמצעות פונקציה גלובלית שבהרבה מקרים דורשת שהמחלקה שלה היא עושה העמסה תשים אותה כפונקציה חברה

קוד לדוגמא שמסביר למה זה עדיף (אני חושב שהקוד די מסביר את עצמו)


// Right Overloading
class A
{
public:
A();
A(int num) : x(num),y(num) {}
protected:
int x,y;

friend A operator+(const A& first,const A& second);
};

A operator+(const A& first,const A& second)
{
A result;
result.x = first.x + second.x;
result.y = first.y + second.y;
return result;
}

// Wrong Overloading
class B
{
public:
B();
B(int num) : x(num),y(num) {}
B operator+(const B& other)
{
B result;
result.x = x+other.x;
result.y = y+other.y;
return result;
}
protected:
int x,y;
};

int main()
{
A a = 3;
B b = 5;

A result = a +9;
result = 9 + a;

B result2 = b + 9;
result2 = 9 +b; // error : lvalue expects an object
return 0;
}

לגבי ירושה מרובה הבעייות הן לא כאלה רציניות לדוגמא מה שתואר פה באשכול זה בעיית היהלום שבאמת אפשר לפתור יחסית בקלות ע"י הוספת המילה virtual למחלקה שממנה יורשים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:15   23.04.10   
אל הפורום  
  21. להפך, ירושת יהלום נובעת כאשר משתמשים ב-virtual  
בתגובה להודעה מספר 19
 
לא כאשר לא משתמשים.

class A;
class B : virtual A;
class C : virtual A;
class D : B, C (אפשר גם וירטואלית)

אז זו ירושת יהלום.
וב-VS הבעיה כל-כך קשה, מסתבר, שזה מתקמפל ועובד


ואחלה דוגמא, למרות שבדר"כ זה באמת מקרי קצה...


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   14:52   23.04.10   
אל הפורום  
  22. מה שרשמת זה הפיתרון לבעיית היהלום  
בתגובה להודעה מספר 21
 
   הבעייה מדברת על ירושה רגילה
יש מחלקת אב A ממנה יורשים B ו C (ירושה רגילה) ומחלקה D שיורשת מ B ו C
עכשיו אתה קורא לפונקציה וירטואלית ב A מ D ויש ambiguity כי הקומפיילר לא יודע אם אתה מתכוון לA של B או לA של C.
אם אתה עושה גם B וגם C ירשו וירטואלית מ A אז הקומפיילר יודע לאחד את המופעים של A למופע אחד וככה נפתרת הבעייה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   15:05   23.04.10   
אל הפורום  
  24. לא לא לא... הפתרון עצמו הוא ירושת היהלום  
בתגובה להודעה מספר 22
 
בגלל המבניות שהירושה נראת.

במקום ירושה שתראה ככה:

אז היא נראת ככה (בצורת יהלום):
http://www.programmerinterview.com/images/Diamond_inheritance.png
הוירטואליות גורמת להצבעה לאובייקט משותף במקום ל-2 אינסטנסים נפרדים...

ואם יורשה לי להוסיף, זה לא רק במתודות וירטואליות פותר את הבעיה, אלא גם באפקאסטינג וכד'..


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   15:09   23.04.10   
אל הפורום  
  25. אנחנו סתם טוחנים מים אנחנו מדברים בדיוק על אותו הדבר  
בתגובה להודעה מספר 24
 
   זה לא משנה איך קוראים לזה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   15:11   23.04.10   
אל הפורום  
  26. חחח כן... סתם קצר בתקשורת :) בכל מקרה, כל מי שאומר  
בתגובה להודעה מספר 25
 
ש-++C לא גאונית פשוט לא מבין איך השפה ממומשת מאחורי הקלעים.
כל (!!!) פעולה שאתה מבצע ב-++C בהכרח מתבצעת ב-(1)O... (אולי חוץ ממבני הנתונים ב-STL/GNU).
דברים מטורפים יש... כמו upcasting והזזת דלטות ו-this.
בקיצור... wow


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   12:39   26.04.10   
אל הפורום  
  27. אממ מה הסיבה אז שfriend פותר את זה?  
בתגובה להודעה מספר 19
 
   תודה רבה על העזרה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   01:28   27.04.10   
אל הפורום  
  28. אתה משתמש ב friend שפונקציה גלובלית רוצה לגשת ל  
בתגובה להודעה מספר 27
 
   data members של מחלקה שהם protected או private

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   01:30   27.04.10   
אל הפורום  
  29. כן אבל למה הדרך השניה היא שגויה?  
בתגובה להודעה מספר 28
 
   מאיזו סיבה?
או פשוט לקחת את זה כחוק? חחח

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:12   23.04.10   
אל הפורום  
  20. נכון ולא נכון. קודם כל, הורשה מרובה דורש רמה של גאונות  
בתגובה להודעה מספר 17
 
אחרת בשביל לממש. ב-Java - זה יגיע בסופו של דבר, למרות שהרעיון של אינטרפייס ומחלקה אבסטרקטית דיי מאפשר לבצע דבר הדומה להורשה מרובה ולכן הם לא טורחים עדיין לממש את זה.

ואולי זה נכון שהם לא הכרחיים, אבל הם כן מקלים על החיים בתיכנות לעיתים.

העמסת אופרטורים טובה מאוד כאשר עובדים במקביל עם טיפוסים פרמטיביים,
למרות שתמיד אפשר לבצע inboxing ב-Java (קצת יותר בעייתי ב-#C) ולהעזר במתודות בעלות שם משותף.

ב-C# הגיעו למסקנה שפויינטרים לפעמים זה כן דבר נחוץ.

בסה"כ, הכל עניין של perfomance מול קלות תכנות.
ו-C לא הייתה השפה מס' 1 בשוק כיום אם הפרפומנס לא היה חשוב כמו שהוא חשוב.



בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   15:01   23.04.10   
אל הפורום  
  23. יש עדיין המון דברים שימשיכו להכתב ב C ו C++  
בתגובה להודעה מספר 20
 
   ואני אומר את זה בתור אחד שמאוד תומך ב NET. וחושב שהיא סביבה מדהימה.

חוץ מזה, NET. חוסך ממך ללמוד המון, זה מעולה - אבל גם רע
ת'כלס - אני רואה את זה המון בצבא. שאני נמצא במקומות שכותבים ב NET. אני רואה הבדל פשוט עצום בין מתכנתים שהגיעו מתכנות C/C++
לעומת אנשים שלמדו לתכנת ב- C#. אתה לא לומד המון מתודלוגיות בסיסיות שב-C# יש פתרון מובנה אליהן(הדוגמה הכי נפוצה היא delegates) ופשוט רואים את החוסר ידע הזה בקוד..

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net