לגלישה באתר בגירסה המותאמת לסלולאר
| הוספת הודעה
הגדרות תצוגה

הגדרות עץ הודעות

מאפייני צפייה

הצג טקסט בתצוגה
הצג תגובות באופן
עדכן
1742017,420 עוקבים אודות עסקים

פורום שפות תכנות

ברוכים הבאים לפורום שפות תכנות!
פורום זה נועד לסייע בידיכם, המפתחים המתחילים והמנוסים.
ישנן שפות כמו PHP שלהן פורומים משלהם, אך עדיין נשתדל לתת תשובה לכל שאלה עניינית שתוצג.
 
נא לשים לב: איננו נוהגים לפתור את שעורי הבית שלך. אם נתקלת בבעיה ללא פתרון זה דבר אחד אולם שליחת דף שאלות לא תענה ואף תמחק.
פרסומות, קללות, הערות גזעניות, תגובות מזלזלות ואיומים אסורים וגולשים שיעברו על חוקים אלו יורחקו.
כמו שאסורות תגובות מזלזלות, אסורות שאלות מזלזלות.
אנא ממך, לפני שאילת שאלה, יש לבדוק אם לא נשאלה בעבר, או אם חיפוש פשוט בגוגל יכול לפתור אותה.
פורום תכנות מיועד לפלפולים ובהחלט יש כאן מקום לדיונים מעמיקים על קוצו של ;...
אם השרשור מתארך - זאת לא בעיה כל עוד התוכן ענייני, אל תחששו לשאול משהו שלא הבנתם,
כל עוד טרחתם לחפש פתרון (חבר'ה, גוגל. ברצינות) ולא מצאתם.
הודעות אישיות הן מחוץ לעיניינו של הפורום, אבל אם בדעתכם לשלוח הודעה אישית למי מהעונים לשרשור,
אולי כדאי שתמשיכו בשרשור לטובת גולשים אחרים ולטובת ניצול הזמן של העונים.
 
הפורום הוא התנדבותי, הבה לא נשחית את זמנם של הכותבים בו לריק.

הנהלת הפורום:

אודות הפורום שפות תכנות

ברוכים הבאים לפורום שפות תכנות!
פורום זה נועד לסייע בידיכם, המפתחים המתחילים והמנוסים.
ישנן שפות כמו PHP שלהן פורומים משלהם, אך עדיין נשתדל לתת תשובה לכל שאלה עניינית שתוצג.
 
נא לשים לב: איננו נוהגים לפתור את שעורי הבית שלך. אם נתקלת בבעיה ללא פתרון זה דבר אחד אולם שליחת דף שאלות לא תענה ואף תמחק.
פרסומות, קללות, הערות גזעניות, תגובות מזלזלות ואיומים אסורים וגולשים שיעברו על חוקים אלו יורחקו.
כמו שאסורות תגובות מזלזלות, אסורות שאלות מזלזלות.
אנא ממך, לפני שאילת שאלה, יש לבדוק אם לא נשאלה בעבר, או אם חיפוש פשוט בגוגל יכול לפתור אותה.
פורום תכנות מיועד לפלפולים ובהחלט יש כאן מקום לדיונים מעמיקים על קוצו של ;...
אם השרשור מתארך - זאת לא בעיה כל עוד התוכן ענייני, אל תחששו לשאול משהו שלא הבנתם,
כל עוד טרחתם לחפש פתרון (חבר'ה, גוגל. ברצינות) ולא מצאתם.
הודעות אישיות הן מחוץ לעיניינו של הפורום, אבל אם בדעתכם לשלוח הודעה אישית למי מהעונים לשרשור,
אולי כדאי שתמשיכו בשרשור לטובת גולשים אחרים ולטובת ניצול הזמן של העונים.
 
הפורום הוא התנדבותי, הבה לא נשחית את זמנם של הכותבים בו לריק.
הוספת הודעה

צרף
תמונה וידיאו קובץ
קבצים המצורפים להודעה

לצפיה ב-' הזמר לירון עמרם מתארח בתפוז '
הזמר לירון עמרם מתארח בתפוז
12/12/2017 | 14:57

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

במסגרת האירוח תוכלו להתכתב עם לירון על ההשפעות המוזיקליות שלו, ההצלחה ברדיו, הקשר המוזיקלי עם אביו ועוד
 
כיתבו ללירון עמרם על גבי שרשור האירוח כבר עכשיו!
 
לצפיה ב-'מס' שאלות:'
מס' שאלות:
10/12/2017 | 15:50
13
29
1) ידוע לי שבהעמסת אופרטור, יש את האובייקט המפעיל ואת הפרמטר, אבל לא ברור לי כיצד זה מתבטא בסינטקס. למשל בכיתוב הבא:
 Point operator+(const Point& other) const
 
2) באילו מקרים חייבים להגדיר פונקציה מסוימת כפונקציה חברה?
3) לא ברור לי לגמרי המושג "העמסת פונקציות". האם מדובר בפונקציות שנושאות את אותו שם ורק הפרמטר שלהן שונה? ומתי קיימת סכנה שהקומפיילר לא ידע להבחין לאיזו פונקציה אנחנו קוראים במקרה כזה?
4) לגבי אופרטור השמה : האם יש לשחרר בתוכו זיכרון דינאמי? או שמשחררים רק בדסטרקטור?
5) במה שונה יצירת אובייקט חדש באמצעות קונסטרקטור לעומת הקצאה דינאמית לאובייקט כזה? האם הקצאה דינאמית לא משתמשת בקונסטרקטור?
לצפיה ב-'מס' תשובות:'
מס' תשובות:
10/12/2017 | 23:08
12
44
1. יש 2 דרכים להעמיס אופרטור:
פונקציה עצמאית שמקבלת 2 פרמטרים - האובייקט שאמור להיות בצד ימין, וזה שאמור להיות בצד שמאל של האופרטור.
פונקציה בתוך מחלקה: מקבלת רק את הפרמטר שאמור להיות בצד ימין של האופרטור, כאשר אובייקט שעליו מופעלת הפונקציה הוא למעשה זה שאמור להיות בצד שמאל.
 
בדוגמה שלך, זה נראה כך:
 class Point {
public:
   Point operator+(const &Point);
}

Point a, b, c;

c = a + b;
\\מה שקורה למעשה זה:
c = a.operator+(b);
 
 
2. במקרים שממש רוצים לשבור "הכלה" (incapsulation) ולתת לפונקציה זרה למחלקה לגעת באיבריה הפנימיים.
כמו שנאמר - "C++ the only language where your friends can touch your privates"
 
3. כן - "פונקציה מועמסת" היא פונקציה בעלת שם זהה וערך מוחזר זהה אבל פרמטרים מסוגים שונים או בכמות שונה.
 
אם הקומפיילר "יתבלבל" הוא יציג לך הודעת שגיאה כדי שתדע לשנות את הקוד.
סביר יותר שאתה תתבלבל, אם לא תזהר, והפונקציה שתיקרא תהיה שונה מזו אליה התכוונת.
 
3. תלוי במימוש, רוב הסיכויים שלא. זו שאלה ממש לא ברורה.
 
4. לא יוצרים אובייקט חדש באמצעות קונסטרקטור. אף פעם!
קונסטרקטור מאתחל אובייקט שכבר הוקצה (למרות שמו).
 
כשאתה מקצה אובייקט בעזרת new, אתה מקצה אותו באזור זיכרון שנקרא heap.
זה נקרא הקצעה דינמית, כי אתה יכול לעשות new כמה פעמים שאתה רוצה בזמן ריצה.
עדיין יקרא קונסטרקטור.
 
לאומת זאת, יש הקצעה סטטית - משתנה שאתה מגדיר ללא שימוש ב-new.
אובייקט זה יאוחסן באזור זיכרון שנקרא "מחסנית".
היתרון הוא שלא תצטרך לעשות לו delete בעצמך - הוא ישוחרר אוטומטית.
 
החיסרון הוא, שכמות אובייקטים כאלה נקבעת מראש בעת כתיבת הקוד.
לכן קוראים לה הקצעה "סטטית".
לצפיה ב-'תודה רבה!'
תודה רבה!
10/12/2017 | 23:38
11
3
לצפיה ב-'שאלות נוספות באותו הקשר:'
שאלות נוספות באותו הקשר:
11/12/2017 | 08:58
10
18
1) נניח שיש לי מחלקה class. במה שונה הקצאה דינאמית של אובייקט כזה, לדוגמה
 class* c = new class;
 
לעומת האופן בו אני פשוט ארשום:
 class c;
?
 
מדוע הקצאה דינאמית עשויה להיות עדיפה על הפעולה השניה כנ"ל?
 
2) נניח שיש לנו מחלקה של מטריצה דו מימדית. להלן  הקוד הבא:
 Matrix  Matrix::operator +(const Matrix &other)const  
{
   Matrix temp(rows,cols);  
   if (rows!=other.rows ||cols!=other.cols)
   {
      for(int i=0;i<rows;i++)
       for(int j=0;j<cols;j++)
           temp.Mat[i][j]=Mat[i][j];
      return temp;
   }
   else
    {      
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
                temp.Mat[i][j]+=other.Mat[i][j]+Mat[i][j];
    }
   return temp;
}
א) האם נכון לומר שהקוד הבא מהווה העמסת אופרטור + לחיבור של שתי מטריצות?
ב) האם השורה
 Matrix temp(rows,cols); 
מתוך הקוד לא מהווה יצירה של אובייקט חדש ואתחולו ע"י הקונסטרקטור?
ג) בשורה
 temp.Mat[i][j]+=other.Mat[i][j]+Mat[i][j];
מה מהווה כאן ה-
 Mat[i][j]
לעומת ה-
 other.Mat[i][j]
?
3) האם זוהי בניה נכונה של אופרטור השמה של מטריצה ?
 void Matrix::operator=(const Matrix &other )   // overloading operator =
{
   if(Mat !=other.Mat && cols==other.cols && rows==other.rows)
    {
      for(int i=0;i<rows;i++)
       for(int j=0;j<cols;j++)
           Mat[i][j]=other.Mat[i][j];
    }
}
4) נניח שאני מעוניין לבנות אופרטור של כפל מטריצה במספר שלם מימין ומשמאל.  האם לצורך כך יש לבנות אופרטור של כפל מטריצה במספר שלם מימין, ופונקציה חברה של כפל מטריצה במספר שלם משמאל? מדוע למעשה אופציה זו תקינה? האם יש אלטרנטיבה אחרת?
 
 
לצפיה ב-'נחלק את התשובה, ונתחיל מ-1:'
נחלק את התשובה, ונתחיל מ-1:
11/12/2017 | 14:52
5
אתה לא יכול ליצור מחלקה class כי זו מילה שמורה ב-++C.
 
לגבי הקצעה דינמית עם new:
הקצאה דינמית מתרחשת רק כאשר אתה קורא לשורת הקוד בה מופיע new.
אם אתה לא מגיע לשורה הזו (נניח תנאי כלשהו לא מתקיים), לא מוקצה זיכרון.
אז יכול להיות שחסכת לעצמך זיכרון (ופעולת אתחול אובייקט).
 
בנוסף, ניתן לבצע הקצעה של מספר אובייקטים במערך ע"י new.
נניח שיש לך מחלקה Car שמייצגת מכונית.
 
אתה שואל את המשתמש כמה מכוניות יש לו, ומקצה כמות אובייקטים בהתאם ככה:
 class Car {
}

int numberOfCars;
cout << "How many cars do you have?" << endl;
cin >> numberOfCars;

Car *cars = new Car[numberOfCars];
 
הקצעה סטטית, ללא שימוש ב-new, חוסכת לך את הצורך לנהל את הזיכרון לבד.
אתה לא צריך לדאוג לשחרר את האובייקט, הוא ישוחרר אוטומטית כשצריך (כשיצא מהסקופ).
 
אבל, אתה חייב לקבוע מראש, בזמן כתיבת הקוד, כמה אובייקטים אתה רוצה שיהיו.
נניח שיש לך מחלקה שמייצגת כתובת חיוב של כרטיס אשראי. נקרא לה BillingAddress.
 
היות ומותר שתהיה אך ורק כתובת אחת כזו, תוכל להגדיר בצורה סטטית משתנה שיחזיק אותה. אין צורך להקצות דינמית.
 
לכל סוג הקצעה יש שימוש מתאים שתלוי בצרכים של התוכנה שלך.
רוב התוכנות ישתמשו בשני סוגי הקצעות במקומות שונים.
לצפיה ב-'סיף 2:'
סיף 2:
11/12/2017 | 14:57
5
א) נכון לומר.
ב) אכן, מהווה יצירה ואתחול.
ג) זו גישה לאיבר של המחלקה.
נראה שלמחלקה Matrix יש איבר בשם Mat, שהוא סוג של מערך דו ממדי (או אובייקט שמתנהג כמו מערך דו ממדי), שהוא זה שמחזיק בפועל את המספרים של המטריצה.
 
אז ניגשים לאיבר של האובייקט עליו הפעילו את פונקציית האופרטור (צד שמאל של ה-+, כמו שהראיתי לך בתשובה קודמת), ולאותו איבר של אובייקט אחר (צד ימין) אותו קיבלנו בתור פרמטר בשם other.
לצפיה ב-'סעיף 3'
סעיף 3
11/12/2017 | 17:05
1
אני חושב שלא, אבל אי אפשר לדעת בלי לראות את המימוש המלא של המחלקה Matrix.
 
ראשית, מה משמעות הבדיקה Mat != other.Mat בתנאי?
שנית, מה קורה אם גודל המטריצות אינו זהה?
 
כרגע לא קורה כלום, אבל האם זו התנהגות רצויה?
לצפיה ב-'סעיף 4:'
סעיף 4:
11/12/2017 | 17:22
6
4
השאלה בסעיף לא ברורה:
 
אין הבדל מתמטי מבחינת אם המספר השלם מופיע מימין או משמאל.
אם אתה רק מחפש תירוץ להתאמן בכתיבת פונקציות דריסת אופרטור, ניחה, אבל אם אתה חושב שצריך באמת פונקציונליות שונה אז אני לא בטוח למה אתה מתכוון.
 
על איזו אופציה בדיוק אתה שואל?
ולמה לדעתך אופציה כזו לא צריכה להיות תקינה?
 
בהנחה שאתה דורס אופרטור ע"י פונקציה חיצונית למחלקה, היא לא בהכרח צריכה להיות "חברה" של המחלקה.
למשל, האם אפשר לגשת לאיברים של המטריצה מבחוץ, נניח דרך מתודה פומבית (public)?
 
אם כן, אפשר לממש אופרטור חיבור בלי פונקציה חברה.
 
אם אי אפשר לגשת (מטריצה די לא שימושית?), אז חייבים פונקציה חברה.
לצפיה ב-'לגבי סעיף 4'
לגבי סעיף 4
11/12/2017 | 19:04
5
6
כפל של מטריצה במספר שלם אפשר לכתוב כאשר המספר מימין למטריצה או משמאל למטריצה. אם אני רוצה שהכפל יתבצע כך שהמספר יהיה מימין למטריצה, אז למיטב ידיעתי בקלות אפשר להעמיס פרמטר כפל , כך שהאובייקט המפעיל יהיה המטריצה והפרמטר הוא המספר. במקרה שאני רוצה שהכפל יתבצע כך שהמספר יהיה משמאל למטריצה , על פניו האופרטור שטיפל במקרה שהמספר יהיה מימין למטריצה, כי במקרה הזה האובייקט המפעיל לא יכול להיות המטריצה כי הוא מצד שמאל של פעולת הכפל. מה דעתך?
לצפיה ב-'ולגבי שאלה 3 , הנוגעת לכתיבת אופרטור השמה של מטריצה'
ולגבי שאלה 3 , הנוגעת לכתיבת אופרטור השמה של מטריצה
11/12/2017 | 19:07
3
8
איך מקובל לכתוב אותו (כמובן גם פסיאודו-קוד יסייע לי להבין)?
במקרה שהגדלים זהים פשוט מבצעים העתקה מלאה. מה קורה במקרה שהגדלים זהים, והפונקציה שעל ידה אני מעמיסה את אופרטור ההשמה אמורה להחזיר אובייקט?
לצפיה ב-'ולגבי קטע קוד שמופיע בשאלה 2 שלי, יש לי שאלה נוספת:'
ולגבי קטע קוד שמופיע בשאלה 2 שלי, יש לי שאלה נוספת:
11/12/2017 | 19:10
1
6
כאמור, נוצר במקרה זה אובייקט חדש temp , ואמורים להחזיר כך שהוא יהווה סכום של שתי מטריצות. מדוע מוחזר שם temp ללא & ?
ובאופן כללי יותר - מתי אפשר להחזיר אובייקט ללא & ?  האם לא עדיף להחזירו כך או ליצור דינאמית אובייקט כזה?
לצפיה ב-'כי האובייקט temp מוקצה סטטית'
כי האובייקט temp מוקצה סטטית
11/12/2017 | 23:08
2
אובייקטים שמוקצים סטטית ממוקמים על המחסנית - זיכרון מקומי של פונקציה.
ברגע שהפונקציה מסתיימת, הזיכרון הזה משוחרר, וכל האובייקטים עליו מושמדים אוטומטית.
 
אם היית מחזיר רפרנס ( & ) ל-temp, הרפרנס היה לא חוקי מחוץ לפונקציה, כי האובייקט אליו הוא מתייחס כבר לא קיים.
 
לכן, מחזירים את האובייקט by value, כלומר למעשה נוצר עותק שלו שממשיך להתקיים גם אחרי שהפונקציה הסתיימה ו-temp מקורי הושמד.
 
ניתן להחזיר רפרנס ( & ) רק לאובייקטים שממשיכים להתקיים.
 
בכל מקרה, אופרטור חיבור אמור להחזיר ערך, לא רפרנס ולא מצביע, לכן אין לך ברירה אלא להחזיר ערך.
 
זכור! העמסת אופרטורים נועדה לאפשר לך לתת משמעות לאופרטור עבור טיפוס נתונים שיצרת בעצמך (מחלקה שלך).
היא לא מאפשרת לשנות את ההתנהגות של האופרטורים, כלומר, אם אופרטור מקבל 2 פרמטרים ומחזיר ערך, זה מה שהוא ימשיך לעשות.
 
אם אופרטור אמור להחזיר רפרנס (כמו במקרה של הצבה) זה מה שהוא ימשיך לעשות.
לצפיה ב-'זוכר ששאלת למה צריך this?'
זוכר ששאלת למה צריך this?
11/12/2017 | 22:56
6
זו דוגמה מעולה!
 
אופרטור השמה צריך להראות כך:
 Matrix& Matrix::operator=(const Matrix &other){
   ...
   return *this;
}
 
למה להחזיר רפרנס לאובייקט עצמו?
כדי שניתן יהיה לשרשר פעולות נוספות כפי שחוקי לעשות ב-++C, למשל כך:
 int a, b, c;
c = 42;
a = b = c;

Matrix m1, m2, m3;
m1 = m2 = m3;
כמובן שאתה לא צריך ליצור שום אובייקט חדש, כי זה לא מה שאופרטור השמה עושה. הוא מציב ערך בתוך אובייקט קיים.
 
לגבי מה צריך לקרות אם המטריצות אינן בגודל זהה?
זה תלוי בך! אתה קובע את המימוש.
 
אפשרות אחת שנראית לי הגיונית ביותר היא לשנות את גדול המטריצה אליה מציבים, ואז לבצע העתקה כאילו הגדלים היו זהים.
 
אבל אם אינך רוצה לתמוך במטריצות דינמיות (כאלה שמשנות גודל לאחר שנוצרו), אתה יכול להחליט לזרוק חריגה (exception).
לצפיה ב-'אז, כל מה שאתה רוצה זה לתמוך ב-2 צורות כתיבה?'
אז, כל מה שאתה רוצה זה לתמוך ב-2 צורות כתיבה?
11/12/2017 | 22:48
9
סבבה, כדי שהמספר יהיה משמאל, אתה אכן צריך לייצר פונקציה חיצונית למחלקה.
למעשה, במקום להעמיס אופרטור כפל עבור מחלקה Matrix, אתה מעמיס אופרטור כפל עבור מספרים שלמים.
 
מה הבעיה שאתה חושב שתהיה עם פונקציה כזו?
 
אם אינך רוצה לשכפל קוד, הפונקציה יכולה להפוך את סדר הפרמטרים ולהחזיר את תוצאת החיבור, כך היא למעשה תפעיל את הפונקציה המועמסת מתוך המחלקה.
לצפיה ב-'הפיכת עץ בינארי לרשימה מקושרת דו כיוונית'
הפיכת עץ בינארי לרשימה מקושרת דו כיוונית
10/12/2017 | 00:26
4
25
היי לכולם. יש לי תרגיל בשיעורי בית שכל השבת ישבתי עליו ללא הצלחה. אשמח לעזרתכם.
יש לי עץ בינארי, ואני צריך להפוך אותו לרשימה מקושרת דו כיוונית בסדר של pre-order. אסור להשתמש בפונקציות עזר. והפונקציה צריכה לשנות את המצביעים של כל צומת בעץ, כך שהמצביע השמאלי יצביע לאיבר הקודם ברשימה, והמציע הימני יצביע לאיבר הבא.
מכשולים: אסור להשתמש בפונקציות עזר וצריך לשנות את המצביעים של העץ עצמו ולא ליצור רשימה חדשה.
המימוש עצמו הוא ב-c
 
אודה לעזרתכם!
לצפיה ב-'נראה לי שאפשר ברקורסיה'
נראה לי שאפשר ברקורסיה
10/12/2017 | 16:52
3
22
בגדול האלגוריתם צריך להיות עבור כל צומת בעץ
1) הפוך את הענף הימני לרשימה מקושרת דו כיוונית והחזר מצביע לתחילתו
2) הפוך את הענף השמאלי לרשימה מקושרת דו כיונית והחזר מצביע לתחילתו
3) חבר את הרשימה המקושרת השמאלית לצומת הנוכחית  ואחריה לרשימה המקושרת הימנית
 
אתה מוזמן לחשוב על הפרטים....
לצפיה ב-'השאלה איך להפוך את זה לרשימה מקושרת'
השאלה איך להפוך את זה לרשימה מקושרת
10/12/2017 | 20:56
2
17
ניסיתי מספר אלגוריתמים ובכולם נוצר לי איזשהו בלאגן במצביעים.
לצפיה ב-'אז בוא נתחיל מכמה שאלות מנחות:'
אז בוא נתחיל מכמה שאלות מנחות:
11/12/2017 | 17:50
1
8
אתה יודע איך עוברים על עץ ב-pre-order?
 
האם אתה יודע לסדר עץ בגובה 1 (ללא ענפים) כרשימה מקושרת?
מה לגבי עץ בגובה 2 (שורש ועלים)?
לצפיה ב-'כן'
כן
11/12/2017 | 18:33
7
ראשית כן, אני יודע איך לסדר ב-preorder, וגם יש לי פונקציה בתוכנית שמדפיסה את העץ בpre-order (לא מסדרת רק מדפיסה). במידה והיה מותר לי להשתמש בפונקציות עזר הייתי משתמש בפונקציה הזאת וסוגר עניין.. אבל אסור.
עץ בגובה 0 זה לצורך העניין צומת אחד שגם במצביע השמאלי וגם בימני אתה מקבל ערך ריק, וכך גם תהיה הרשימה המקושרת, כלומר לא צריך לשנות אותו.
כנל לגבי עץ עם שני בנים. רק שבמצביע הימני של הבן השמאלי צריך שיהיה מצביע לאיבר שלפניו, וכנ"ל גם למבציע בבן הימני.
לצפיה ב-'מישהו מכיר את שפת התכנות CHILL ואת שפת Protel?'
מישהו מכיר את שפת התכנות CHILL ואת שפת Protel?
11/12/2017 | 17:15
7
יש שפת תכנות מיוחדת למתגים בשם CHILL שפותחה ב-1980 ע"י  ה-CCITT. יש לשפת התכנות המיוחדת הזו ערך מיוחד בויקיפדיה:
 
 
קיימת שפת תכנות נוספת שפותחה במעבדות של נורטל ושמה Protel:
 
 
האם יצא למישהו לעבוד עם שפות התכנות האלה?
לצפיה ב-'שאלה ב C++'
שאלה ב C++
02/12/2017 | 14:24
8
52
הקוד הבא המקומפל עם g++ לא עובר קומפילציה, השגיאה:
error: cannot bind non-const lvalue reference of type ‘A&’ to an rvalue of type ‘A’
  class A
{
   int data;
public:
   A(int d){data=d;}
};
void func( A  &a)
{    
}
main(){
  func (A(7));
}
 
הוא דורש שהפרמטר המועבר לפונקציה func יהיה const ( ואז באמת זה עובר ), למה ?
אגב תחת הקומפיילר של VS זה כן עובר קומפילציה.
 
לצפיה ב-'מה שאתה מנסה לעשות, נוגד את הסטנדרט של ++C'
מה שאתה מנסה לעשות, נוגד את הסטנדרט של ++C
02/12/2017 | 16:32
7
35
אתה מנסה להעביר אובייקט זמני (temporary) בתור ייחוס (by reference).
אבל למה בדיוק הייחוס משמש?
הרי אחרי הקריאה לפונקציה, האובייקט יחדל להתקיים, וכל שינוי שהפונקציה תעשה בו, יהיה חסר משמעות.
 
אתה יכול, לפי התקן, להעביר ייחוס קבוע (const reference) לאובייקט כזה.
כלומר, הפוך את החתימה של func לכזו:
 void func(const A &a) {
   ...
}
 
אם אתה תוהה למה זה מתקמפל ב-VS, התשובה היא "הרחבות".
הרבה קומפיילרים, בניהם gcc ו-msvc ממשים הרחבות לשפות C ו-++C שמאפשרות לך לכתוב קוד לא תקין שלא יתקמפל בקומפיילרים אחרים, אבל יעבוד בלי בעיה באותו קומפיילר.
 
ניתן להדליק ולכבות הרחבות אלה בעזרת פרמטרים שמועברים לקומפיילר (ונמצאים בד"כ בהגדרות פרויקט או Makefile).
 
נראה כי ל-VS יש הרחבה ספציפית שמאפשרת לך לשבור את הסטנדרט והיא מופעלת ברירת מחדל.
 
יש דיון רחב בנושא באנגלית כאן:
לצפיה ב-'אוקי הבנתי , אגב נראה לי שיכולה לצוץ בעיה בסטנדרט הזה'
אוקי הבנתי , אגב נראה לי שיכולה לצוץ בעיה בסטנדרט הזה
02/12/2017 | 17:47
6
22
אם אנחנו כן רוצים  שהפונקציה תשנה את האוביקט , כי אנו מתיחסים לזה  בהמשך ואז נקרא לפונקציה ככה  
 A a(7);
func(a);
if(a.returnValue== ...){
//....
}
ולפעמים לא איכפת לנו מה השתנה באוביקט  ואז נקרא לו כמו מקודם, ככה:
 func ( A(7));
אם אני שם const אני מגביל את הפונקציה לא לשנות את האוביקט.
 
המטרה הראשית בהעברת האוביקט כרפרנס היא כדי לחסוך את העתקתו ( ברפרנס מעבירים רק מצביע לאוביקט  ).
 
 
 
לצפיה ב-'הבעיה אינה בסטנדרט, אלא בדיזיין שלך:'
הבעיה אינה בסטנדרט, אלא בדיזיין שלך:
02/12/2017 | 18:16
5
21
למה שתהיה לך פונקציה שתפקידה לשנות את האובייקט שהיא מקבלת, אם מדי פעם אתה מחליט בצורה אקראית לזרוק את השינויים האלה לפח?
 
הדוגמה הראשונה שהצגת כאן, היכן ש-a אינו זמני, תתקמפל ותעבוד.
 
הדוגמה השנייה מן הסתם לא, אבל נשאלת השאלה:
למה אתה קורה לפונקציה func במקרה השני?
מה התועלת בשינויים שהיא תעשה באובייקט אם האובייקט לא קיים אחרי שהפונקציה חוזרת וכל העבודה שלה נמחקה?
 
לפי דוגמת הקוד הראשונה, נראה שעיצוב הנכון של הפונקציה היה צריך להיות עם ערך חוזר שאינו void.
לא ברור לי למה החלטתה לבנות פונקציה שכביכול מחזירה ערך ע"י דחיפה שלו לפרמטר שהיא מקבלת במקום החזרתו כמקובל?
 
אני יכול רק לנחש, שלפונקציה יש מה שנקרא "side effects" - פעולות שאינן קשורות להחזרת ערך ולא לשינוי של פרמטרים, אבל כן יש להם השפעה על פעולת התוכנית (למשל, הדפסה למסך, כתיבה לקובץ וכו').
 
במקרה כזה, כנראה שהגיע הזמן לתכנן מחדש:
אולי צריך לדרוס את הפונקציה (override) עם גרסה שפשוט מקבל const int במקום A?
 
למה לשלוח לפונקציה אובייקט זמני? זה בזבוז מקום ועבודה - האובייקט נוצר, מוחזק בזיכרון, ונזרק לפח.
 
לחלופין, אם אינך יכול לפצל את הפונקציה לגרסה שמשנה אובייקט וכזאת שלא, או בכלל לתכנן מחדש, תבנה לה מעטפת שתקבל int, תבנה אובייקט מקומי שאינו זמני, ותעביר אותו (by reference) לפונקציה המקורית.
 
שפת ++C היא שפה "שמנה", עם המון סינטקס ואפשרויות.
איני מכיר לעומק את הסטנדרט שלה ואיני מסכים עם כל מה שהיוצר שלה - ביורן סטראסופ, עשה, אבל במקרה הספציפי הזה אני רואה יותר בעיה עם דוגמאות שימוש שסיפקת מאשר עם הסטנדרט.
לצפיה ב-'יתכן למשל שהפונקציה בעיקר קוראת את התוכן של האוביקט'
יתכן למשל שהפונקציה בעיקר קוראת את התוכן של האוביקט
02/12/2017 | 18:47
4
12
ועושה עם זה כל מיני דברים ובנוסף כותבת לאיזה משתנה סטטוס שקיים בתוך האוביקט שיש מקומות בקוד שמסתכלים עליו ובמקומות אחרים לא איכפת לנו ממנו.
 
טוב , אז כמו שאמרתה אפשר לפתור את הבעיה הזאת, למשל על ידי החזרת משהו מהפונקציה  דרך ה return או דרך משתנה רפרנס נוסף שאינו const ( בכל מקרה זה עולה קצת בביצועים ובקוד נוסף )
 
----------
לגבי מה שאמרתה ש:
 
למה לשלוח לפונקציה אובייקט זמני? זה בזבוז מקום ועבודה - האובייקט נוצר, מוחזק בזיכרון, ונזרק לפח.
 
אבל גם אם נוסיף את ה const עדין יש לייצר את האוביקט  הזמני עם כל העלויות שכרוכות בזה,נכון ?
לצפיה ב-'לא הבנתי:'
לא הבנתי:
02/12/2017 | 19:03
3
15
מה בדיוק עולה בביצועים וקוד נוסף?
 
החזרת ערך אינה משפיע על ביצועי התוכנה כלל.
אם כבר, הצבת ערך חוזר במחסנית יכולה, במקרים מסוימים, להיות זולה יותר מאשר כתיבתו לאיבר של אובייקט שנשמר ב-heap.
 
אבל זה בכל מקרה "מיקרו אופטימיזציות" שלא רלוונטיות ולא נחוצות בשפות מודרניות עם קומפיילרים מודרניים.
 
גם לא ברור איזה קוד נוסף נדרש כאן, מעבר להחלפת שורת הצבה בשורה של return?
 
ייתכן שאני מפספס משהו משום שאני לא מכרי את כל פרטי המימוש, שאתה מן הסתם לא יכול לפרסם.
אבל לפי מה שאני מבין, הכל מתנקז לשאלה של דיזיין.
 
זה נכון, שאם תיצור אובייקט זמני ותשלח ref קבוע אליו, האובייקט עדיין נוצר.
 
השאלה האם לשלם את העלות הזו, תלויה בנחיצותו של האובייקט עצמו.
כלומר, האם בכלל יש צורך שהאובייקט יהיה קיים?
כדי לענות על השאלה הזו, צריך לדעת מה הפונקציה שלך עושה עם האובייקט:
 
כתבת שהפונקציה בעיקר קוראת מידע מהאובייקט.
אם כך, אולי בכלל לא צריך להעביר לה אובייקט, אלא רק את המידע הרלוונטי ממנו?
 
בהתאם לכמות השדות שהפונקציה צריכה, ייתכן שהגיוני לפצל אותם לפרמטרים ולהעביר רק את הפרמטרים מאשר להתעסק עם יצירת אובייקטים זמניים.
 
אבל אני רק זורק ניחושים.
בלי לדעת את מפרט הבעיה המלא וה-Use case, דברים שאני מניח שאינך יכול לשתף בפורום, קשה לענות על שאלות דיזיין שכאלה.
 
אני מניח שיש דרכים לעקוף את מגבלת הסטנדרט.
תלוי בתוצאה שאתה מנסה להשיג, ייתכן שאתה עדיין יכול לקמפל עם msvs בצורה כזו או אחרת, למצוא צירוף פרמטרים ל-gcc שיוותר לך, או לעבור לקומפיילר אחר כמו llvm (אם תמצא אחד שממש הרחבות דומות ל-msvc).
 
אני בכל זאת ממליץ לכתוב קוד תקני שיתקמפל בכל קומפיילר וכל סביבה, ולחשוב טוב טוב על הדיזיין של הקוד.
אם אתה מוצא את עצמך נלחם בסטנדרט של השפה, או שהשפה דפוקה, או שהשפה לא מתאימה לשימוש שלך, או שהדיזיין שלך דפוק.
 
אני חושב שאנו יכולים לפסול את שני האופציות הראשונות במקרה הזה:
++C נחשבת לשפה וותיקה וטובה ונפוצה בתעשייה, ואתם משתמשים בה כבר די הרבה זמן.
אז כנראה שהבעיה היא פשוט בעיית דיזיין קטנה, ואולי פשוט קיבלת הזדמנות לשפר את הקוד.
 
נצל אותה!
 
בהצלחה!
לצפיה ב-'קודם כל אני כבר פתרתי את הבעיה'
קודם כל אני כבר פתרתי את הבעיה
02/12/2017 | 19:18
2
25
הוספתי את ה const כמו שהקומפילר הציע בהודעת השגיאה. רק רצית בעיקר להבין למה תחת VS זה כן מתקמפל ( ועניתה שזה קשור להרחבות ).
 
אני לא מתכוון להלחם בסטנדרט של C++ אלה לזרום איתו  .  אני מעדיף לתקן את הקוד מאשר לחפש קומפילר שיסכים לקמפל את הקוד המקורי.  אגב הקוד המקורי התקמפל ורץ יפה תחת חלונות, וכעת הוא נדרש להתקמפל גם ב g++ .
 
לגבי החזרת ערך יתכן באמת שזה לא עולה יותר מהצבה למשתנה אוביקט ,.
 
לגבי פיצול האוביקט לפרמטרים זה יכול לעלות יותר , אם למשל האוביקט מכיל 20 שדות  שהפונקציה קוראת,  אז במקום להעביר מצביע לאוביקט יש להעביר 20 פרמטרים שזה נראה לי כבד יותר. ( מצד שני יש חסכון בהתחול אוביקט זמני, אז אולי זה כן פתרון )
 
לצפיה ב-'סתם מתוך סקרנות:'
סתם מתוך סקרנות:
02/12/2017 | 19:39
1
24
אתה יכול לספר באיזו גרסה של VS זה מתקמפל?
שנים לא עבדתי עם VS, אבל לפי הבנתי הצמדות שלהם לסטנדרט משתנה מגרסה לגרסה והיית אמורה להתהדק בגרסאות האחרונות.
 
בכל אופן, שאלת פרמטרים נפרדים מול רפרנס לאובייקט בודד היא מעניינת:
להעביר 20 פרמטרים לפונקציה זה מעיק.
 
לא רק מבחינת כמות הדברים שצריך לדחוף למחסנית, אלא גם מבחינת איך הקריאה לפונקציה כזו תראה בקוד, ומה המתכנת יצטרך לכתוב.
 
מצד שני, אם אתה מייצר אובייקט זמני שאתה מעביר לפונקציה הזו, מהיכן באים ה-20 פרמטרים האלה?
 
כשאתה מייצר אובייקט זמני כפרמטר לפונקציה, מתבצעות למעשה 2 קריאות במקום אחת:
קודם מתבצעת קריאה לבנאי של האובייקט הזמני, ואז הקריאה לפונקציה המקורית.
 
אם הבנאי מקבל את כל אותם 20 פרמטרים ומאתחל איתם את האובייקט, לא רק שלא חסכת כלום, אלא למעשה הוספת די הרבה עבודה מיותרת.
 
אם הבנאי מקבל רק חלק קטן מהפרמטרים ובונה מזה את השאר, נשאלת השאלה:
האם לא הגיוני שהפונקציה תמצא דרך פנימית לעשות את אותה העבודה, בין אם ע"י קריאה לבנאי בעצמה לבין אם ע"י יצוא הקוד המדובר לפונקציית שירות (אולי סטטית או מחוץ למחלקה)?
 
זה נושא שאפשר לפתח עליו דיון די מעניין בהתאם לנסיבות לאילוצים...
לצפיה ב-'VS 2012'
VS 2012
02/12/2017 | 20:15
21
לגבי הסוגיה אם להעביר 20 פרמטרים או לבנות בנאי שגם אותו צריך להתחל, אז במקרה שלי כנראה שעדיף להעביר את הפרמטרים ( מדובר ב 5  ), אבל כרגע זה ממומש עם העברת אוביקט , בכל אופן  זה לא קריטי מדובר בהתחול שנעשה פעם ב ... ואני לא רוצה לשנות יותר מידי את הקוד שכבר רץ היטב הרבה זמן  ( כל שינוי בקוד מחייב זהירות רבה כדי לא להכניס בגים ).
 
לצפיה ב-'הכנסת נתונים והעתקת נתונים בין טבלאות עם mysql ופייתון'
הכנסת נתונים והעתקת נתונים בין טבלאות עם mysql ופייתון
02/12/2017 | 12:17
17
הי.
נניח ויש לי טבלה שמכילה את השדות id, type, weight, color, size וכו'..
המשתמש מכניס 2 נתונים:
id מקור
id חדש
(בוצעה בדיקה כי id מקור אכן קיים במסד..)
 
המטרה: אני רוצה להכניס לטבלה materials שורה חדשה בה הערך בשדה id יהיה הערך שהוכנס בשם id חדש, ושכל שאר השדות יועתקו אוטומטית מהרשומה שהמזהה שלה הוא id מקור בלי שהששתמש יצטרך לשבת להזין הכל מחדש
 
האם יש דרך לעשות זאת? 
 
תודה ושבוע טוב! 
 
לצפיה ב-'לקמפל פייתון'
לקמפל פייתון
02/12/2017 | 11:51
22
אז אני עושה תוכניות בפייתון שאני רוצה לקמפל לקובץ EXE בשביל שאני אוכל להריץ בחלונות....
חיפשתי בגוגל ומצאתי את pyinstaller ו- py2exe, אבל לא הבנתי איך משתמשים בהם....
ב- pyinstaller שאני משתמש ב- kali linux הוא יוצר לי קובץ .spec ושתי ספריות build ו- dist, אבל אין לי מושג איך להשתמש בקובץ/ספריות ליצירת קובץ exe.
ב- py2exe לא הצלחתי להשתמש בכלל...
 
אז השאלה שלי היא איך מקמפלים? לא אכפת לי באיזו פלטפורמה- linux או win...
לצפיה ב-'שאלה בג׳אווה (משהו בסיסי)'
שאלה בג׳אווה (משהו בסיסי)
30/11/2017 | 22:05
3
41
שלום לכולם. אני לומד ג׳אווה ואני עובד על איזה משחק.. נתקלתי באיזה בעיה קטנה ורציתי להתייעץ האם אני פותר את הבעיה באופן שניתן בכלל לפתור אותה, או שעליי לגשת בדרך קצת שונה..
ובכן: אני יוצר ב arraylist שתי דמויות לוחם או קוסם. עליי לבדוק אם לוחם תוקף קוסם או שהוא תוקף לוחם אחר.. אני שולח ברגע שיש תקיפה את הדמות שמותקפת למתודה שצריכה לבדוק כמה נקודות חיים להוריד (בהתאם לדמות המותקפת). עכשיו המשתנים בתא של ה arraylist הם נקודות חיים, ונקודות תקיפה.
אני עובד ב eclipse והבחנתי במעקב שם שיש זיהוי שנראה כמו בתמונה שצירפתי.
האם יש דרך לברר אם זה אכן warrior (ליד ה id ששווה ל47 בתמונה) או שעליי לפתור בדרך אחרת, למשל הוספת שדה לדמויות שאומר בעצם אם הוא לוחם או קוסם...
(אם ההסבר לא הכי ברור תגידו ואצרף את השאלה עצמה..)
לצפיה ב-'יש פה 2 שאלות בעצם:'
יש פה 2 שאלות בעצם:
01/12/2017 | 11:56
2
33
1. שאלה טכנית: האם ניתן לזהות את הטיפוס הספציפי של האובייקט בתא מסוים של ArrayList?
 
התשובה לשאלה היא: כן - בכל מקום ב-Java ניתן להגיע לטיפוס של אובייקט בזמן ריצה.
משתנה, מערך, או אחד מטיפוסי ה-container כמו ArrayList.
 
אתה יכול להשתמש ב-instanceof
 
או אתה יכול להשתמש במתודה getName של המחלקה Class:
 
זה יראה בקוד ככה:
 if ("Warrier".equals(arr[0].class.getName())) {
   ...
}
 
2. שאלת דיזיין:
אם הגעת למצב שאתה צריך להשתמש בקוד ב-instanceof או משהו דומה, כנראה שהקוד שלך לא בנוי טוב.
 
למשל, אם יש לך משחק בו דמויות תוקפות אחת את השנייה, ואתה צריך לחשב את הנזק שנגרם לדמות המותקפת, אתה צריך לבנות את הלוגיקה כך שסוג הדמות לא ישנה.
 
כלומר, צריך להבין: למה אם לוחם תוקף קוסם הוא גורם יותר נזק?
האם לכל דמות יש "רמת הגנה" או "שריון" שונים?
 
אם כן, צריך להוסיף לאובייקט של הדמות משתנה שייצג את רמת ההגנה של הדמות, או כל מאפיין (מספרי) אחר שמשפיע על יעילות מתקפות נכנסות, ולהוסיף את הערך של המשתנה הזה בחישוב.
 
לחלופין, אם יש במשחק נשקים שאכן משנים את כמות הנזק שהם גורמים לפי "סוג אויב", ייתכן שיש סיבה להוסיף איבר של מזהה סוג לכל אויב, אבל עדיין זה יהיה עדיף כנראה משימוש בשם המחלקה לזיהוי.
כי ייתכנו כמה אויבים שונים מאותו סוג. למשל, קוסם שחור וקוסם לבן (קרא על משחקי RPG).
חרב שגורמת יותר נזק לקוסמים תגרום יותר נזק לשניהם, אבל ייתכן שהמחלקה שתייצג כל אחד תהיה שונה.
 
אם תספר יותר על הכללים של המשחק, אפשר יהיה להציע לך דיזיין טוב יותר לקוד.
לצפיה ב-'אתה צודק.. פתרתי באמצעות instanceof, אך לא היתה לי ברירה..'
אתה צודק.. פתרתי באמצעות instanceof, אך לא היתה לי ברירה..
01/12/2017 | 12:13
1
24
אני חייב לדעת, כאשר אני מתקיף באמצעות לוחם האם הנתקף הוא קוסם או לוחם על מנת שאני אדע את כמות הנקודות שאני צריך להוריד בהתאם לאופי המותקף. מה שעשיתי בדקתי באמצעות instanceof אם מדובר בלוחם, אם כן אז יוריד x נקודות כי הוא לוחם.. אחרת הנתקף קוסם ואז אני אוריד y נקודות כי זה כל מה שנשאר... אני לא ראיתי אפשרות אחרת שאני יכול לדעת מראש את מי אני תוקף..
בכל אופן תודה, פתרתי...
לצפיה ב-'גישה לא נכונה לבעיה'
גישה לא נכונה לבעיה
01/12/2017 | 23:58
21
צריך להיות ממשק של תקיפה הגנה וכו שימומש בכל מחלקה לפי הפרמטרים שלה.
 
לצפיה ב-'ירושה .שפת ג'אווה'
ירושה .שפת ג'אווה
29/11/2017 | 16:15
3
58
היי חברים אשמח לחוות דעת על התשובות שלי לשאלות הבאות:
תשובות שלי:ד' ,ב'


לצפיה ב-'דעתי, אחלה תשובות...'
דעתי, אחלה תשובות...
29/11/2017 | 17:16
2
43
עכשיו, השאלה האמתית היא:
האם אתה באמת מבין למה דווקא התשובות האלה, או שאתה מנחש ולא בטוח?
 
למשל, האם אתה מבין למה תשובה א' לשאלה הראשונה לא נכונה?
או מה הפרט הקטן שחסר בתשובה ב' לשאלה מס' 4, למרות שזו עדיין תשובה נכונה?
לצפיה ב-'תשובה'
תשובה
06/12/2017 | 19:03
1
9
בראשונה מבין כי צריך שהשיטה תקבל אותו סוג פרמטר ותחזיר גם אותו סוג פרמטר כדי שתידרס או כדי שלא תהיה שגיאת קומפילציה. בשאלה השנייה לא בטוח כי לא סגור על זה או ב או ד. ומה הפרט שחסר בב'?
לצפיה ב-'אז ככה:'
אז ככה:
07/12/2017 | 00:02
6
1. ב-Java יש שני סוגים של טיפוסים:
טיפוסים "פרימיטיביים" כמו int, char, double וטיפוסי ייחוס (reference) שהם למעשה אובייקטים, כגון String או כל מחלקה שתכתוב בעצמך.
 
במקרה של טיפוסים פרימיטיביים, השיטה אכן חייבת להחזיר אותו טיפוס בדיוק כדי להיות override.
במקרה של אובייקטים, ניתן "לצמצם" את הטווח, ולהחזיר טיפוס של מחלקה יורשת.
 
אבל כמובן בשום מקרה אי אפשר לשנות לחלוטין את הטיפוס המוחזר למשהו לא קשור.
 
2. ב-Java יש 3 סוגי "טווח גישה" על איברי מחלקה ומתודות:
   1. private - זה איבר (או מתודה) פרטי שניתן לגשת אליו רק מתוך המחלקה עצמה.
   אפילו מחלקה יורשת לא יכולה לראות אברים שהם private של מחלקת האב שלה.
   וזו הסיבה שתשובה ד' נפסלת.
 
   2. protected - איבר או מתודה שזמינה מתוך המחלקה עצמה וזמינה גם למחלקות יורשות. ועל זה מדברת תשובה ב'.
 
   3. public - איבר או מתודה שזמינים לגישה של כל אחד. זה הפרט שחסר בתשובה ב':   
      מן הסתם, מחלקה יורשת יכולה לגשת לכל מה ש-public בנוסף לכל מה ש-protected.
 
למעשה, הפירוט למעלה קצת מופשט ולא לגמרי מדויק.
ב-Java גם מחלקות שאינן יורשות ממחלקה מסוימת אבל נמצאות איתה באותה חבילה יכולות לגשת לאיברים שהם protected.
ויש גם "טווח גישה" רביעי - package private שאין לו מילת סימון בקוד בכלל, והוא יוצר מצב מוזר בו מחלקה יורשת לא רואה את האיבר (או המתודה) אבל מחלקה לא קשורה מאותה חבילה כן.
 
יש טבלה נחמדה בקישור הזה:
לצפיה ב-'שימוש במצביע this'
שימוש במצביע this
26/11/2017 | 06:35
14
52
לא ברור לי הצורך בשימוש במצביע הזה וגם אופן הפעולה שלו.
האם שימוש במצביע הזה מתבקש במקרה של יצירה של יותר מאובייקט אחד?
לצפיה ב-'יכול להיות שימוש לדוגמא'
יכול להיות שימוש לדוגמא
26/11/2017 | 09:17
11
41
אם אתv מגדיר מחלקה ויש לה פרמטרים בשמות מסויימים.
ונגיד יש גם פונקציה של המחלקה שמקבלת פרמטרים באותו שם.
אז למשל
כאשר רוצים לפנות לפרמטרים בהגדרת המחלקה כותבים this.stam, ואם הפונקציה מקבלת משתנה בשם stam אז ניתן לרשום stam. אותו הדבר עם אובקייט.
לצפיה ב-'לא הבנתי כ"כ :(...'
לא הבנתי כ"כ :(...
26/11/2017 | 10:17
10
9
לצפיה ב-'תשובה'
תשובה
26/11/2017 | 10:36
9
42
 class Box {
  public:
     // Constructor definition
     Box(double l = 2.0, double b = 2.0, double h = 2.0) {
        cout <<"Constructor called." << endl;
        length = l;
        breadth = b;
        height = h;
     }
     double Volume() {
        return length * breadth * height;
     }
     int compare(Box box) {
        return this->Volume() > box.Volume();
     }
     
  private:
     double length;     // Length of a box
     double breadth;    // Breadth of a box
     double height;     // Height of a box
};
העתקתי דוגמא מהקישור: https://www.tutorialspoint.com/cplusplus/cpp_this_...
הגדירו מחלקה בשם BOX. הכוונה ל- this היא האובייקט/המופע עצמו. בדוגמא הזו: הפונקציה compare שמוגדרת במחלקה מקבלת בפרמטר אובייקט שגם הוא מסוג box. אם יוצרים למשל שני מופעים/אובייקטים מהמחלקה הזו כאשר האובייקט מפעיל את הפונקציה compare פונים אליו ב- this.
יש ב- google הסברים טובים באנגלית. כל שאלה את יכול להריץ באנגלית ב- google ולקבל תשובות טובות. 
לצפיה ב-'הדוגמא שלך לא ממש טובה'
הדוגמא שלך לא ממש טובה
28/11/2017 | 16:40
8
39
כי אם תוריד בה את המילה this, התוכנית עדיין תתקמפל באותה צורה ותרוץ באותה צורה.  המילה this כאן מיותרת לגמרי ואינה מוסיפה או תורמת שום דבר.
 
המשתנה this נחוץ בעיקר אם רוצים לשמור את המידע על האובייקט הנוכחי איפשהו, להעביר אותו למישהו אחר (כדי שיוכל לקרוא חזרה אלינו למתודות אחרות בעתיד)
לצפיה ב-'טובה לגמרי'
טובה לגמרי
28/11/2017 | 16:50
7
37
אני לא אמשיך להתווכח כאן עם עלומי שם על למה הסינטקס של השפה הוא כזה, זה מיותר לדעתי. ואם תקרא טוב את הדוגמא ואת השם שלי במקום ישר לרשום לא טוב, זה שם של בת ולא כתוב בשום מקום שזה לא יתקמפל. אתה מוזמן לתת בעצמך דוגמא מקודדת ושימושית, במקום לחפש איפה מה שכתבו לא טוב.
לצפיה ב-'עלומי שם?'
עלומי שם?
28/11/2017 | 22:43
6
30
למה, אוסתנס זה שמך האמיתי?  ומה זה קשור למה שכתבתי?  נעים מאוד.  שמי כתוב בכרטיס, אם הוא מעניין אותך, ואני עובד בפיתוח ב ++C כבר 20 שנה, ובעבר גם ניהלתי את הפורום ששנינו כותבים בו כרגע.
 
השאלה המקורית היתה למה נחוצה המילה השמורה this.   הדוגמא שלך אינה דוגמא טובה משום שהשימוש ב this אינו נחוץ בה כלל, הדוגמא שלך תרוץ בדיוק באותה צורה אם תשתמשי במילה השמורה באופן מפורש ואם לא, ולכן לא הדגמת כאן שום צורך.  זה לא קשור לסינטקס של השפה, זה קשור לזה שיש מקרים שבהם this הוא נחוץ והכרחי, וזה לא אחד מהם.  
 
תוכלי לראות דוגמאות למקרים כאלו בקישור הבא:
לצפיה ב-'אוסנת שמי האמיתי'
אוסנת שמי האמיתי
29/11/2017 | 09:43
5
26
מה אתה רוצה שאני אכתוב את השם של דודה שלי? זה לא משנה לי ההסטוריה שלך או כמה שנים אתה מתכנת ב- C++. מספיק להבין את המושג this ולא צריך לחכות ולחפש יומיים תשובה באיזה קוד חוסר שימוש ב- this לא היה מתקמפל. במקום להשתרשר לתשובות של אחרים ולכתוב להם שהתשובה שלהם לא טובה אפשר לענות לשואל תשובה ישירה (...זה טכנית אפשרי בפורום). כל אחד יכול לתכנת 20 שנה ב- C++ אם לחברה יש משאבים להתעסק עם למה צריך this, ולהצמד לתשובות של אחרים ולהעיר להם. אתה מוזמן לענות ישירות לשואל ולהצמד לתשובות שלך במקום להעיר לאחרים אחרי יומיים. 
לצפיה ב-'כל העיקרון של פורום'
כל העיקרון של פורום
29/11/2017 | 11:09
4
23
הוא שאפשר לפתח דיון.  משתמש אחד שואל, משתמש אחר עונה, משתמש שלישי לא מסכים, וכך מתפתח דיון שממנו אפשר ללמוד משהו.  כמובן, רק אם רוצים ללמוד.  אם לא רוצים, אפשר סתם להתווכח.  
 
בשני שרשורים שונים נתת תשובות שגויות לאנשים.  נכון, אפשר היה פשוט לתת תשובה אחרת, ואז לשואל המקורי היו שתי תשובות שונות, ו 50% סיכוי לבחור בכל אחת מהן.  או שאפשר להצביע על הטעות, ולהסביר אותה, ואם תהיי פתוחה גם להקשיב, אולי תקבלי את ההסבר.  כרגע נראה שאת לוקחת הכל נורא אישי ונעלבת מכך שמתקנים אותך, וכלל לא קוראת את ההסבר. המטרה של להגיב לך היא לא להעליב אותך, המטרה היא לפתח את הנושא, כי הרבה בסוף קוראים את התשובות האלו והן גם מאוחסנות בגוגל לנצח.  אם כל אחד היה מדבר רק לעצמו, זה היה פורום עוד יותר דל ומשעמם מאשר מה שהוא היום (ופעם באמת שהוא היה הרבה יותר פעיל ועם דיונים יותר ארוכים).
לצפיה ב-'למה שאתה תקבע אם נתתי תשובה שגויה או לא?'
למה שאתה תקבע אם נתתי תשובה שגויה או לא?
29/11/2017 | 11:17
3
29
אני לא שאלתי אותך, לא ביקשתי ללמוד ממך, וזו התשובה שאני נותנת, שלדעתי היא נכונה. אם יש לך תשובה אחרת אתה מוזמן לרשום בלי לחכות יומיים שמישהו אחר יענה ואז לתקן אותו. אם מישהו קורא את התשובה ולא מסוגל להבין מה מנסים להגיד לו ואם זה שגוי או לא שלא ילמד תכנות. גם התשובה שלך שכתבת אחרי יומיים כתגובה אלי לא ברורה ולא מוסיפה הרבה, וזה שאתה מתקן אנשים במקום לענות תשובות מועילות לא מועיל לכלום. אתה מן הסתם לא אמור להחליט מה יאוחסן בגוגל ומה לא.
לצפיה ב-'מעצבן פורום פומבי, כל אחד יכול לענות לך'
מעצבן פורום פומבי, כל אחד יכול לענות לך
29/11/2017 | 19:53
6
לצפיה ב-'אני הסברתי, נימקתי, ונתתי תשובה חילופית'
אני הסברתי, נימקתי, ונתתי תשובה חילופית
30/11/2017 | 12:20
1
18
את לא רוצה לקרוא ולהבין, לא חייבת.  אף אחד לא יכריח אותך.  
 
אבל את גם לא תגידי לאף אחד אחר מה לכתוב בפורום, מתי, אחרי כמה זמן, ולמי לענות.
לצפיה ב-'לא מתאים לך שאנשים אחרים עונים'
לא מתאים לך שאנשים אחרים עונים
30/11/2017 | 16:04
25
תתכנת לעצמך פורום עם שם משתמש ובלעדיות ואל תתדבק להודעות שלי. אני לא כתבתי לך למי לענות, כתבתי לך שאני לא מעוניינת בתיקונים שלך. התשובה שלך לא היתה חלופית, התשובה הראשונה שלך היתה לרשום לי שאני טועה ורשמת עוד משפט ממש לא ברור, כאשר המטרה שלך היתה ברורה לרשום לי שאני טועה. ואותי הדיעה שלך לא מעניינת.
לצפיה ב-'אם אתה מתכוון לקרוא לפונקציה'
אם אתה מתכוון לקרוא לפונקציה
27/11/2017 | 17:17
31
שצריכה מצביע למחלקה מתוך המחלקה עצמה אתה צריך את המצביע הזה.
למשתנים באותו שם אפשר לשנות את השם.
אי אפשר לעקוף קריאה לפונקציה שדורשת מצביע.
נניח שיש מחלקת שעון.
ונניח שיש מחלקה שניה שמקבלת פרמטר של שעון ומחזירה שעון קיץ/חורף.
אם רוצים לקרוא לשיטה הזו ממחלקת השעון עצמה, מעבירים this.
 
לצפיה ב-'אולי זה בשביל להקל על ה intelisens'
אולי זה בשביל להקל על ה intelisens
30/11/2017 | 21:50
2
לצפיה ב-'תרגיל ב- OOP אשמח לעזרה בפתרון באג '
תרגיל ב- OOP אשמח לעזרה בפתרון באג
28/11/2017 | 20:46
1
36
תודה רבה מראש!
 
לצפיה ב-'מה הבאג?'
מה הבאג?
28/11/2017 | 22:10
10
לצפיה ב-'שגיאה באג entity framework '
שגיאה באג entity framework
27/11/2017 | 12:19
9
24
אני התחברתי ב entity framework בויזואל סטודיו למסד נתונים שלי בשרת ...
ברגע שאני מריצה את הקוד זה רושם לי כאלו לא התחבר עם השגיאה הבאה :
Sql = The function evaluation requires all threads to run.
ראיתי בגוגל שזה בעיה בדיבאג ואפשר לשנות בהדגרות של הדיבאג וזה יכסה את הבעיה וגם אחרי ששינתי זה רושם לי :
Sql = Implicit function evaluation is turned off by the user
משהו יודע מה הפתרון לבעיה ?
לצפיה ב-'צריך להפריד בין בעיה בקוד שלך לבעיה בכלי debug.'
צריך להפריד בין בעיה בקוד שלך לבעיה בכלי debug.
28/11/2017 | 09:35
8
13
כלי debug לפעמים מפשלים, לא מראים לך ערכים שאת צריכה, לא עוצרים ב-break point וכו'.
 
במקרים כאלו תנסי לבדוק את התוכנה שלך כאילו אין לך כלי debug.
תריצי אותה ותראי אם היא עושה מה שהיא אמורה לעשות.
אם לא אפשר להדפיס כל מידע בכל מיני נקודות בדרך עד שמבינים מה כן קרה ולמה לא הגענו ליעד המבוקש.
 
 
אל תיתני לבעיה בכלים שאת משתמשת לעצור אותך מלהמשיך לפתח
לצפיה ב-'הבעיה היא בחיבור של הSQL '
הבעיה היא בחיבור של הSQL
28/11/2017 | 09:41
7
11
כל התוכנה שלי בנויה על החיבור ל SQL ולכן ברגע שבחיבור כבר יש בעיה שום דבר לא יכול להמשיך לרוץ ... והנתונים לא נשלפים לי ולא מתעדכנים לי .
אז אין לי מה לעשות ?
 
לצפיה ב-'אם יש לך בעיה בחיבור, למה את מראה לנו פלט של ה-watch?'
אם יש לך בעיה בחיבור, למה את מראה לנו פלט של ה-watch?
28/11/2017 | 09:51
6
13
ה-watch הוא כלי של ה-IDE בזמן debug ולא קשור לבעיות בחיבור ל-DB.
 
איך הגעת למסקנה שיש לך בעיה בחיבור?
הפלט ששמת פה בהודעה שלך בכלל לא אומר את זה.
לצפיה ב-'מצורף צלום מסך , הפלט של מה ששמתי זה מוצג לי בדבאג ליד SQL'
מצורף צלום מסך , הפלט של מה ששמתי זה מוצג לי בדבאג ליד SQL
28/11/2017 | 10:12
5
10
לצפיה ב-'למה צירפת קובץ word?'
למה צירפת קובץ word?
28/11/2017 | 11:01
4
7
לצפיה ב-'עכשיו מצורף כתמונה'
עכשיו מצורף כתמונה
28/11/2017 | 11:05
3
13
לצפיה ב-'זה מה שכתבת בהודעה הראשונה. זה לא מעיד על שום בעיה בתוכנית.'
זה מה שכתבת בהודעה הראשונה. זה לא מעיד על שום בעיה בתוכנית.
28/11/2017 | 11:56
2
15
כל מה שזה אומר זה שה-Visual Studio לא יכול עכשיו להציג לך עכשיו את הערך של השדה הזה.
 
אין פה שום דבר דבר שאומר שאין לך חיבור ל-DB.
לצפיה ב-'אם ככה לא ברור לי מה הבעיה '
אם ככה לא ברור לי מה הבעיה
28/11/2017 | 13:49
1
13
אני לא יודעת מה הבעיה אני רק מסתבכת בלמצוא אותה :
כשאני מריצה שאילתא אחרי החיבור של EntityFramework
 var s1 = from OCRD in s.OCRDs
                    select OCRD.CardName;
זה לא מכניס לי כלום לתוך s1,
עשיתי לולאה לצורך בדיקה
foreach (string a in s1)
וזה רושם לי תשגיאה הבאה :
An unhandled exception of type 'System.Data.Entity.Core.EntityException' occurred in EntityFramework.SqlServer.dll
 
Additional information: The underlying provider failed on Open.
 
 
 
לצפיה ב-'או, זה אומר שיש בעיית חיבור'
או, זה אומר שיש בעיית חיבור
28/11/2017 | 14:16
28
זה נראה כמו עצות טובות לטפל בבעיה הזו:
 
לצפיה ב-'קטע של קוד לא ברור לי '
קטע של קוד לא ברור לי
24/11/2017 | 16:28
19
47
אני תוהה אם בקטע הקוד הנ"ל יש משפט תנאי בתוך פקודת cout.
 void Clock::show()
{
cout << (hours < 10 ? "0" : "")
<< hours << ":"
<< (minutes < 10 ? "0" : "")
<< minutes;
}
 
לצפיה ב-'ויש לי גם שאלה על private'
ויש לי גם שאלה על private
24/11/2017 | 16:42
17
25
מצד אחד , אני מבין שב-private  אנו שמים תכונות שהערך שלהן לא משתנה.
מצד שני, אנימבין שב-public ניתן להגדיר פונקציות שמשנות את אותם ערכים.
 
אשמח אם מישהו יבהיר לי את העניין הזה ויישב את ה"סתירה" הזאת (שאני מניח שהיא פשוט "קצר" גדול בהבנה שלי).
לצפיה ב-'אין שום סטירה: לא הבנת נכון את תפקיד ה-private.'
אין שום סטירה: לא הבנת נכון את תפקיד ה-private.
25/11/2017 | 00:30
16
29
הערכים ב-private יכולים להשתנות כמה שתרצה.
רק ערכים const אינם משתנים.
 
גם פונקציות (מתודות) יכולות להיות private.
 
ההבדל בין שדה (משתנה) private ל-public הוא מי יכול לשנות אותו.
שדה שמוגדר private יכול לשנות רק קוד בתוך המחלקה.
שדה שמוגדר public אפשר לשנות ישירות מכל מקום בקוד.
 
אז למה עושים שדות private ואז כותבים פונקציה public כדי לשנות אותם?
כדי לשמור על עקרון ההכלה ולשלוט בקלות על השינויים.
 
נניח שיש לך מחלקה שמייצגת בן אדם.
במחלקה יש שדה age ששומר את הגיל של האדם.
 
מן הסתם, שדה כזה לא יכול לקבל ערך שלילי, כי אין דבר כזה "בן 10-".
 
אם היית עושה את השדה הזה public, היית צריך לבדוק מה מכניסים אליו בכל מקום בקוד שניגש אליו.
ואם אתה בכלל לא שולט בקוד שמשתמש במחלקה שלך, אלא רק במחלקה עצמה?
איך תוודא שלא ייווצרו בני אדם בגיל שלילי?
 
אם תקבע את השדה private, כל קוד מחוץ למחלקה יצטרך לעבור בפונקציה שלך שתיצור, כדי לשנות אותו. בפונקציה הזו תוכל לבדוק שהערך שמבקשים לשים בשדה חוקי, לפני שאתה מסכים לשנות את השדה.
 
עוד דוגמה:
נניח שאתה כותב מחלקה שמייצגת זווית.
אתה בוחר לייצוג הפנימי לשמור את הזוויות בתור מעלות במשתנה מסוג float.
 
אבל אחרי זמן מה גילית שנוח לך יותר לעשות חישובים עם רדיאנים, ובשביל דיוק גבוהה יותר להחזיק את הערך במשתנה מסוג double.
 
מה עכשיו?
אם האיבר ששומר את המעלות היה public, היה צריך לרוץ בכל מקום בקוד ולשנות את כל הטיפול בו.
אבל אם הוא private, יש רק מקום אחד בקוד בו תצטרך לעשות המרה ולשנות טיפול - פונקציות get ו-set במחלקה שלך.
שאר הקוד בתוכנה יכול להמשיך להשתמש במעלות.
 
לצפיה ב-'עכשיו מובן. יש לי עוד שאלות בבקשה...'
עכשיו מובן. יש לי עוד שאלות בבקשה...
25/11/2017 | 10:13
15
13
1) האם למעשה הבנאי נועד בהגדרת מחלקה לתת ברירת מחדל לפרמטרים המוגדרים תחת private? מתי ניתן לוותר על הבנאי או שמא תמיד יש להגדירו?
מדוע לא ניתן לוותר על הבנאי ולהשתמש במקום זאת בפונקציות get ו-set (אני מניח שתדעו למה כוונתי...) ?
2) מתי יש להשתמש ב-const במחלקה? האם רק בפונקציות שבהכרח לא מבצעות שינוי של הפרמטרים המוגדרים תחת private?
לצפיה ב-'ואם כבר הזכרתי בנאים- לגבי קטע הקוד הבא:'
ואם כבר הזכרתי בנאים- לגבי קטע הקוד הבא:
25/11/2017 | 11:32
13
31
 class Stam
{
int num;
public:
Stam(int n)
{
num = n;
cout << "In c'tor -> num=" << num << endl;
}

~Stam()
{
cout << "In d'tor -> num=" << num << endl;
}
};

void foo(Stam s)
{
cout << "In foo\n";
}

void goo(Stam& s)
{
cout << "In goo\n";
}
מדוע בפונקציה goo יש & אחרי Stam?
לצפיה ב-'כי הוא מקבל בפרמטר'
כי הוא מקבל בפרמטר
25/11/2017 | 15:40
12
32
את הכתובת של המשתנה s ולא את הערך של המשתנה. זו לא נראית מחלקה בעלת משמעות.
לצפיה ב-'את טועה!'
את טועה!
25/11/2017 | 16:11
11
35
הוא לא מקבל כתובת, הוא מקבל reference.
 
אלה דברים קרובים, אבל לא זהים!
 
ב-++C (בניגוד ל-C) יש דבר כזה reference - התייחסות למשתנה - כאילו קיצור דרך אליו.
כשאר מעבירים פרמטר לפי reference כפי שעשו בדוגמת הקוד, זה נותן לפונקציה גישה ישירה לאותו משתנה.
 
בניגוד להעברת כתובת (מצביע, תוך שימוש ב-*), אין צורך לבצע dereference כשרוצים לקבל את הערך.
ניתן לקרוא ולהציב ערכים בפרמטר בצורה רגילה כאילו היה משתנה מקומי של פונקציה, אבל ההצבה תישמר גם מחוץ לפונקציה.
 
לפרטים נוספים קראו כאן:
לצפיה ב-'כל אחד יכול להבין מהתגובה'
כל אחד יכול להבין מהתגובה
25/11/2017 | 20:17
10
36
למה הכוונה לא צריך להכנס לכזה פירוט בהודעה.
לצפיה ב-'סליחה???!'
סליחה???!
25/11/2017 | 20:23
9
24
את רוצה שאני לא אעזור למישהו כדי שלך יהיה הכבוד לא להודות שנתת תשובה שגויה?
איזו מין התנהלות זו?
 
השואל שאל מה משמעות האופרטור & לפני פרמטר.
התשובה הנכונה היא שהאופרטור מציין reference שכלל אינו כתובת!
אם הפרמטר היה כתובת, האופרטור לפניו היה * והשימוש בפרמטר בתוך ומחוץ לפונקציה היה עובד שונה.
 
לפי השאלות של פותח השרשור רואים בבירור שהוא רק לומד, ולכן אין לו דרך לדעת שכשכתבת לו "כתובת" התכוונת בעצם למשהו שבכלל אינו כתובת!
לצפיה ב-'סלחתי'
סלחתי
25/11/2017 | 20:27
8
21
באנגלית reference. אז מה אם הוא לומד הוא לא מטומטם.
לצפיה ב-'כתובת באנגלית זה address'
כתובת באנגלית זה address
25/11/2017 | 20:31
7
18
reference בעברית זה ייחוס.
 
זה לא עניין של תרגום, זה עניין של מינוח נכון ומשמעות המונח.
בתור מתכנתת את וודאי יודעת שחשוב לדייק במינוח כשמתקשרים בעניינים טכניים, אחרת הדבר יוביל לבעיות.
לצפיה ב-'זה כבר לפורום אנגלית'
זה כבר לפורום אנגלית
25/11/2017 | 20:35
6
17
חשוב בתכנות שיעבוד טוב, ויהיה רעיון. אם יש רעיון והתוכנה עובדת טוב לא משנה איך קוראים למונח עברית או אנגלית. סתם חבל על הויכוח, לי נראה שהכוונה ברורה. זה לא מונח שמצריך פרוט יתר.
לצפיה ב-'ממש לא לפורום אנגלית:'
ממש לא לפורום אנגלית:
25/11/2017 | 20:43
5
27
מה לעשות שמקור שפות תכנות רובן ככולן הוא בארצות דוברות אנגלית ולכן גם רוב המונחים הם באנגלית.
 
חלקם מתורגמים לעברית פחות טוב, חלקן יותר טוב, אבל זה לא כ"כ משנה.
צריך לדעת את המונחים הנכונים ולהשתמש בהם נכון, וזה לא משנה מה שפת האם שלך!
 
אני לא יודע מה זה "יעבוד טוב" או "רעיון" - כשאת מתקשרת עם מהנדס אחר בקשר לקוד ורוצה שהוא גם יבין אותך, את צריכה להשתמש במונחים הנכונים.
 
address ו-reference (לא משנה איך תבחרי לקרוא להן בעברית) בשפת ++C הם מונחים שונים, עם סינטקס שונה וצורת עבודה שונה.
 
ואם כבר: לפי מה בדיוק את קובעת איזה מונח מצריך איזה פירוש?
לצורך העניין, אם ניקח את הקוד הבא, מה יודפס:
 int a = 42;

void what(int &num) {
   cout << num;
}
 
לצפיה ב-'אם יש לי עניין אני אתקין אריץ ואבדוק. '
אם יש לי עניין אני אתקין אריץ ואבדוק.
25/11/2017 | 20:56
4
22
האמת, אין לי עניין להבין את בעל השפה אלא להשתמש בשפה. הוא ידפיס את הערך של num, בלי להריץ נראה לי שאם תקרא עם a ידפיס 42. אני לא עם סביבת פיתוח של C, C++.  
לצפיה ב-'למה את צריכה להתקין משהו או להריץ משהו?'
למה את צריכה להתקין משהו או להריץ משהו?
25/11/2017 | 22:30
3
21
ולמה נראה לך?
 
מקודם, ענית בביטחון מלא: "כי הוא מקבל בפרמטר את הכתובת של המשתנה s ולא את הערך של המשתנה"
 
אם הוא מקבל את הכתובת, למה שידפיס ערך ולא את הכתובת שהוא מקבל?
הרי המשפט אומר לו להדפיס את הערך של s?
לצפיה ב-'השיחה הזו מיותרת'
השיחה הזו מיותרת
26/11/2017 | 08:45
2
22
אני לא בחקירה. ואם יש לך תשובה אחרת אז תכתוב במקום להעיר לאנשים אחרים.
כתבתי שהוא מקבל כתובת בגלל העובדה שאם מבצעים השמה בתוך הפונקציה למשתנה הערך שלו משתנה גם שיוצאים מהפונקציה ואם הוא לא רושמים & אז משתמשים בערך שלו ולא משנים אותו בתוך הפונקציה (אם אפשר בלי הפתלספות גם על התשובה הזו).
אני לא מתכוונת להסביר את עצמי אין סוף על המושג הזה רק כדי שתוכל להעיר לי על כל תשובה ולכתוב שאני טועה.
כתבתי נראה לי כי אין לי את סביבת הפיתוח. התשובה הכי נכונה מתקבלת לאחר בדיקה בסביבת הפיתוח. חבל על המשך השרשור שכל המטרה שלך להראות לי שאני טועה אפילו שאתה גם לא מזדהה בשם שלך משום מה.
לצפיה ב-'זו לא היית חקירה, זה היה ניסיון להבהיר לך את הבעיה...'
זו לא היית חקירה, זה היה ניסיון להבהיר לך את הבעיה...
26/11/2017 | 11:09
1
19
אני מסכים איתך שהענף הזה בשרשור מיותר, אבל את זו שהחלטת שנכון לענות לאנשים בפורום עם מידע שגוי ומבלבל, ובחרת לקבוע מה אנשים שאינך מכירה כלל יודעים ולא יודעים, ובאיזה מונחים אפשר להשתמש.
 
אני בסה"כ מנסה להעביר הבדל טכני חשוב בין ייחוס לכתובת בשפת ++C.
 
מה שכתבת נכון - יודפס 42.
הסיבה היא, שייחוס אינו כתובת, ואינו מכיל כתובת, אלא משמש בדיוק באותה צורה כמו שם המשתנה המקורי.
 
אם הפרמטר בדוגמה שלי היה מכיל כתובת, היית מודפסת כתובת, ושימוש באופרטור = היה דורס את הכתובת הזו, ולא משנה בכלל את תוכן המשתנה המקורי (זה שהכתובת שלו נשלחה לפונקציה).
 
ומה לעשות שבגלל שמדובר בפורום פומבי ופתוח, את אני והשואל לא היחידים כאן.
יהיו עוד אנשים עם שאלות דומות שיקראו את השרשור הזה, וחשוב לי שהם יקבלו מידע נכון ומדויק עד כמה שאפשר.
לצפיה ב-'המידע לא שגוי ולא מבלבל'
המידע לא שגוי ולא מבלבל
26/11/2017 | 11:29
28
אתה זה אתה כתבת מאחורי שם בדוי, מה שבא לך.
לצפיה ב-'תפקידו של בנאי הוא...'
תפקידו של בנאי הוא...
25/11/2017 | 16:07
17
"לבנות אובייקט מטיפוס מסוים".
בנאי הוא פונקציה שיכולה לבצע כל מיני דברים.
בניהם, לאתחל את האיברים של המחלקה.
בנאי יכול גם לקבל פרמטרים ולאתחל לפי הם, במקום סתם לתת ערכי ברירת מחדל.
 
אם אין פעולה מיוחדת חוץ מהקצאת זיכרון שצריך לבצע כשבונים אובייקט ממחלקה מסוימת, אפשר לוותר על כתיבה מפורשת של בנאי, והקומפיילר יוסיף בנאי ריק ברירת מחדל.
 
לחלופין, ניתן לתת ערכים ברירת מחדל לאיברי מחלקה ישירות כשמגדירים את האיברים (כמו שמאתחלים כל משתנה), ואז בנאי ברירת מחדל שהקומפיילר בונה ישים את הערכים האלה פנימה.
 
2) מהילה const ב-++C מציינת "לא ניתן לשינוי \ אין שינוי".
משתמשים בה בכל מקום בו צריך להבהיר שערך מסוים הוא קבוע ולא בר שינוי, או שמתודה (לא משנה אם היא private או public) לא משנה את מצב האובייקט.
לצפיה ב-'קרוב:'
קרוב:
25/11/2017 | 00:18
21
לא משפט תנאי, אלא "אופרטור טרינארי".
זה אופרטור שמורכב מ-3 חלקים: תנאי ? ערך אם מתקיים : ערך אם לא מתקיים
 
האופרטור הטרינרי מחזיר אחד מהערכים שלו לפי התנאי.
 
בדוגמת הקוד הנ"ל משתמשים בו כדי להדפיס אפס מוביל אם ערך מסוים קטן מ-10.
זו לא הדרך לפרמט פלט ב-++C, אבל זה שימוש לגיטימי ותקין של האופרטור.
לצפיה ב-'"Open call hierarchy" לא עובד באקליפס לשפת C'
"Open call hierarchy" לא עובד באקליפס לשפת C
25/11/2017 | 19:15
3
31
שלום חברים,
 
במסגרת העבודה אני מנסה להשיג שרשרת קריאות של פונקציה מסויימת ולא מקבל תוצאה (ראו תמונה מצורפת ולמלבן שסימנתי באדום). אני יודע בוודאות שיש לפונקציה הנ"ל זימונים כי אם ניגש לפונקציה שמזמנת אותה ולוחץ F3 אני מגיע לפונקציה הנ"ל.
לא ידוע לי על שום פילטר ויתר על כן, ההתנהגות הזאת לא משתחזרת עבור פונקציות אחרות.
אם הייתי יודע ש"הבעיה" הזאת היא רק בפונקציה הנ"ל אז לא היה אכפת לי, אבל מכיוון שאין לי מושג מה היקף הבעיה אני רוצה לסדר את זה.
חשוב לציין, לא יזמתי שום פילטר שאמור לגרום לבעיה.
ניסיתי למצוא פתרונות ברשת ולא מצאתי. מצרף תמונת מסך שממחישה את הבעיה.
יותר מאודה לעוזרים. תודה ושבוע טוב :)
 
לצפיה ב-'חברים מישהו? (;'
חברים מישהו? (;
26/11/2017 | 08:08
1
16
קיוויתי שמישהו יוכל לעזור לי להתחיל את השבוע עבודה ברגל ימין (;
לצפיה ב-'אם השאלה הייתה פחות מוצפנת, אולי הייתה מתקבלת תשובה.'
אם השאלה הייתה פחות מוצפנת, אולי הייתה מתקבלת תשובה.
27/11/2017 | 17:18
5
לצפיה ב-'הכלי עזר לא עובד, תסתדר בלעדיו'
הכלי עזר לא עובד, תסתדר בלעדיו
28/11/2017 | 09:36
5
לצפיה ב-' copy contructor'
copy contructor
25/11/2017 | 20:32
1
19
אני לא בטוח שהבנתי את אופן הפעולה "בנאי העתקה". לדוגמה בקוד המצורף כאן.
 
class Clock
{
public:
Clock(int h=0, int m=0);
Clock(const Clock& other);

private:
int hours, minutes;
};

Clock::Clock(const Clock& other)
{
hours = other.hours;
minutes = other.minutes;
}
מדוע השויון hours = other.hours  לא כתוב הפוך?
לצפיה ב-'בנאי העתקה בונה אובייקט שהוא העתק של אובייקט אחר'
בנאי העתקה בונה אובייקט שהוא העתק של אובייקט אחר
25/11/2017 | 20:36
16
הפרמטר של הבנאי הוא אובייטק שאותו מעתיקים בעוד שהבנאי עצמו יוצר את העותק.
 
אם היית מבצע השמה הפוכה, היית דורס את האובייקט המקורי עם ערכי זבל של פרמטרים לא מאותחלים.
לצפיה ב-'שלום, מחפש מתכנת לעבודה כלשהי. אשמח להכוונה'
שלום, מחפש מתכנת לעבודה כלשהי. אשמח להכוונה
25/11/2017 | 18:25
25
היי, אשמח להכוונה למתכנת בדגש של יישומי מחשב. עבודה התחלתית על משהו. בנוסף אפשר לחזור למייל:
 
תודה ושבוע טוב :)
לצפיה ב-'ג'אווה עבודה עם קבצים'
ג'אווה עבודה עם קבצים
24/11/2017 | 12:20
1
22
מישהו יודע איך לחפש בג'אווה קובץ בלי לדעת את השם המלא שלו?
תודה
לצפיה ב-'את יכולה להשתמש במתודת list של מחלקה File'
את יכולה להשתמש במתודת list של מחלקה File
25/11/2017 | 00:14
11
המתודה מחזירה רשימה של כל הקבצים בתיקייה מסוימת (איתה יצרת אובייקט מסוג File), ואז תוכלי לבצע חיפוש ברשימה.
 
קראי כאן:
לצפיה ב-'אשמח אם מישהו ,בבקשה, יעשה לי מעט סדר'
אשמח אם מישהו ,בבקשה, יעשה לי מעט סדר
23/11/2017 | 02:31
5
34
ויאמר לי מתי בקבצי h צריך להשתמש ב ifndef ו-endif ?  (אני לומד כעת, אגב, תכנת מונחה עצמים ב cpp).
לצפיה ב-'ifndef הסבר:'
ifndef הסבר:
23/11/2017 | 09:37
4
26
יש שני שלבים חשובים בקומפילציה של ++C:
- preprocessor
- compile
(יש עוד אבל לא חשוב לענייננו)
בשלב ה-preprocessor מטופלים כל הפקודות שמתחילות ב-#.
השלב הזה הוא בעיקר מניפולציות טקסטואליות פשוטות על הקובץ והתוצאה של השלב הזה הוא קובץ list, קובץ טקסט קצת שונה ובד"כ גדול יותר ללא כל הפקודות # שהיו בקובץ המקורי.
הפקודה include# גורמת ל-preprocessor לקחת את הקובץ ששמו רשום אחרי הפקודה ולשים את כל תוכנו במקום שורת ה-include#.
יש הרבה קבצי h שמוכללים בצורה כזו בקבצי cpp. הסיבה היא שבקבצי h יש הגדרות שאתה רוצה שיהיו מוכרות ותוכל להשתמש בהם בקובץ cpp שלך.
יש גם קבצי h שמוכללים בתוך קבצי h אחרים מאותה הסיבה.
נאמר שהכללת בקובץ cpp שלך קובץ h אחד שיש בהגדרה של class A ואז אתה מכליל קובץ h אחר שהוא בתורו גם מכליל את הקובץ h הראשון. התוצאה בקובץ list (אחרי שה-preprocessor עשה את העבודה שלו) היא שיש לך בקובץ cpp שתי הגדרות class A. הקומפיילר ייתלונן על זה, יכתוב לך שזו טעות ויפסיק את עבודתו.
בכדי להימנע מהמצב הזה קיימת הפקודות ifndef# ו-define#.
define# גורמת להגדרת שם (כנראה נכנס לאיזו רשימה פנימית של ה-preprocessor).
ifndef# אומרת ל-preprocessor תתייחס לכל הטקסט שאחרי הפקודה הזו רק עם השם הזה אינו מוגדר כבר.
כך שפעם ראשונה שה-preprocessor נתקל בקוד כזה:
 #ifndef MY_FILE_H
#define MY_FILE_H
blabla
#endif
התוצאה תהיה blabla ובפעם השניה שה-preprocessor יתקל בקוד הזה הוא לא יכניס כלום לקובץ תוצאה (הקובץ list).

כך אפשר לדאוג שהקומפיילר לא יתלונן ש-class A קיים פעמיים בקוד.
לצפיה ב-'תודה, ואיך כל זה קשור להגדרת המחלקה?'
תודה, ואיך כל זה קשור להגדרת המחלקה?
23/11/2017 | 09:47
3
6
לצפיה ב-'הגדרת מחלקה זה פשוט טקסט שמגיע או לא מגיע לשלב ה-compile'
הגדרת מחלקה זה פשוט טקסט שמגיע או לא מגיע לשלב ה-compile
23/11/2017 | 09:52
2
10
לצפיה ב-'אז בכל הגדרת מחלקה נמצא בהכרח ifndef ו- endif ?'
אז בכל הגדרת מחלקה נמצא בהכרח ifndef ו- endif ?
23/11/2017 | 11:37
1
7
לצפיה ב-'בד"כ בכל קובץ h'
בד"כ בכל קובץ h
23/11/2017 | 13:23
15
בד"כ הגדרת מחלקה נמצאת לבדה בקובץ h
לצפיה ב-'שאילתא שכתובה ב VS ושולפת נתונים מ SQL'
שאילתא שכתובה ב VS ושולפת נתונים מ SQL
22/11/2017 | 13:44
6
22
אולי משהו ידע מה הבעיה בקוד שרשמתי השאילתא לא טובה ....
הבעיה היא אחרי ה in ,

SqlConnection objConn = new SqlConnection();
objConn.ConnectionString = "Data Source=213.151.36.65,1433;Initial Catalog=;Persist Security Info=True;User ID=sa;Password=""";
objConn.Open();
var s1 = from ocrd in objConn.Open()
select Max(ocrd.cardcode);
SqlCommand ss = new SqlCommand(s1, objConn);
לצפיה ב-'אצלי זה עובד'
אצלי זה עובד
22/11/2017 | 14:04
5
9
לצפיה ב-'זה השגיאה שזה נותן לי :'
זה השגיאה שזה נותן לי :
23/11/2017 | 08:28
4
9
1. Error CS1936 Could not find an implementation of the query pattern for source type 'void'.  'Select' not found.
2. Error CS0103 The name 'Max' does not exist in the current context
לצפיה ב-'מה זה ocrd? איפה אתה מגדיר אותו בקוד?'
מה זה ocrd? איפה אתה מגדיר אותו בקוד?
23/11/2017 | 09:23
3
10
כל דבר שאתה משתמש בו בקוד צריך להיות משתנה שקיים בקוד שלך.
 
לפני שאתה שם את from ocrd אתה צריך שיהיה לך כזה משתנה.
לצפיה ב-'זה הטבלה שלי ב DB שממנה אני רוצה לשלוף את השדה המק' cardcode'
זה הטבלה שלי ב DB שממנה אני רוצה לשלוף את השדה המק' cardcode
23/11/2017 | 09:35
2
6
לצפיה ב-'אם אתה רוצה להשתמש ב-LINQ כאילו זה SQL בקוד שלך אתה צריך...'
אם אתה רוצה להשתמש ב-LINQ כאילו זה SQL בקוד שלך אתה צריך...
23/11/2017 | 09:46
1
14
... להשתמש ב-LINQ to SQL ולא ב-SqlConnection.
 
ה-SqlConnection עובד בצורה אחרת.
 
אתה יכול להשתמש DataContext ולעשות מיפוי ה-DB שלך ל-LINQ ואז תוכל להשתמש בקוד דומה בכדי לגשת ל-DB שלך.
 
נראה שעירבבת פה שתי צורות שונות של עבודה מול DB.
תחליט באיזו אתה רוצה להשתמש ואז תוכל לקרוא חומר כיצד לבצע את זה.
לצפיה ב-'בהתחלה עשיתי כך וזה גם מביא לי שגיאה עדין חסר לי משהו ...'
בהתחלה עשיתי כך וזה גם מביא לי שגיאה עדין חסר לי משהו ...
23/11/2017 | 10:04
7
           objConn.ConnectionString = "Data Source=213.151.36.65,1433;Initial Catalog="";Persist Security Info=True;User ID=sa;Password=""";
           objConn.Open();
 
           DataContext dc = new DataContext(objConn.ConnectionString);
 
         פה יש לי שגיאה !!!//  var s1 = from ocrd in dc
                       select Math.Max(ocrd.CardCode);
לצפיה ב-'בכתיבת System. לא נפתח המיני תפריט של האפשרויותרוית'
בכתיבת System. לא נפתח המיני תפריט של האפשרויותרוית
21/11/2017 | 10:50
3
41
שלום
 
ב java לאחר שאני רושם System. לא נפתח לי המיני תפריט עם האפשרויות של System, מה אני מפספס?
לצפיה ב-'הכל...'
הכל...
21/11/2017 | 18:39
1
14
לצפיה ב-''
21/11/2017 | 21:57
8
לצפיה ב-'זה בסך הכל פיצ'ר של ה-IDE שאתה משתמש.'
זה בסך הכל פיצ'ר של ה-IDE שאתה משתמש.
22/11/2017 | 14:14
23
זה אמור לעזור לך לכתוב קוד אבל לא להחליף את המתכנת. אתה צריך ללמוד לכתוב את הקוד בעצמך.
 
לפעמים זה מעיד שכתבת משהו לא נכון (ולפעמים זה גם אומר מה) אבל לפעמים הפיצ'ר הזה פשוט תקול.

חם בפורומים של תפוז

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

מקרא סימנים

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