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

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

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

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

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

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

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

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

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

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

לצפיה ב-'שאלה טיפה תאורטית לגבי הרעבה בתהליכים'
שאלה טיפה תאורטית לגבי הרעבה בתהליכים
20/02/2018 | 13:33
3
16
שלום לכולם. היתה לי שאלה במבחן האם תהליך FCFS הוא תהליך שיכול להגיע למצב של הרעבה.
אני סימנתי בתשובה שלי כן ותיארתי מקרה שנקרא אפקט השיירה או Convoy Effect. קיבלתי על זה 0 נקודות.
רציתי לדעת האם convey effect הוא לא סוג (מקרה פרטי) של הרעבה ב fcfs ?
אשמח לחידוד העניין..
לצפיה ב-'יש ירידת ביצועים - אבל לא הרעבה'
יש ירידת ביצועים - אבל לא הרעבה
20/02/2018 | 13:45
2
13
אם סכום הפעולות לביצוע גדול מזמן שניתן לבצעם - תהיה האטה הדרגתית,
אבל בכל נקודת זמן, מובטח לך שתוך X זמן התהליך שאתה רוצה יפעל.
לצפיה ב-'אז אפקט השיירה (הוא מקרה פרטי) של הרעבה ?'
אז אפקט השיירה (הוא מקרה פרטי) של הרעבה ?
20/02/2018 | 13:50
1
12
נניח ואני מחזיק 3 תהליכים והראשון הוא עתיר זמן עבודה, אני יכול לטעון שתהליך שמגיע יחד עם התהליך עתיר הזמן יהיה מורעב וכך גם השלישי ? נניח הראשון יהיה 1000 יחידות זמן עבודה והשני 3 והשלישי 1..
לצפיה ב-'לא'
לא
20/02/2018 | 14:35
15
אם יש לך 4 תהליכים, שמסיבה כלשהי לוקח להריץ אותם יחד 2 מילי שניות,
אבל אתה מצרף אותם לתור כל מילישניה,
אז בכל סבב X  (שמתחיל ב1) - יקח לך עד X מילישניות מזמן הקריאה עד שהתהליך יבוצע.
משמע - אין הרעבה אלא חריגה מקצב העיבוד של המעבד.
 
כל אלגוריתם תזמון שלא זורק תהליכים ישנים לא יצליח לבצע את כל התהליכים אם תוסיף תהליכים בקצב מהיר מיכולת המעבד לבצע אותם,
וניתן לראות בזריקת תהליכים ישנים הרעבה (הם לעולם לא יבוצעו),
כך שאם הצפה זו הרעבה - לא ניתן להימנע מהרעבה באף שיטה.
 
הרעבה משמעה - שבעוד חלק מההתהליכים זוכים לתורם - תהליך אחד תמיד עלול להיות מקופח, ולא יבוצע לעולם.
לצפיה ב-'שאלה לגבי קוד בשפת C - רק מתחיל ללמוד'
שאלה לגבי קוד בשפת C - רק מתחיל ללמוד
10/02/2018 | 19:05
6
37
היי, אני מנסה לכתוב בשפת C קוד של חזקה, כלומר X בחזקת Y.
האם הקוד שכתבתי הוא נכון וטוב? אם לא אשמח להכוונה..
תודה :)
#include <stdio.h>
main ()
{
int x,y,z,sum;
sum=x;
z=1;
for(x, y, z, sum; y!=z; sum*x, z++)
printf("%d\n", sum);
return 0;
}
לצפיה ב-'ניסית לקמפל או להריץ את הקוד?'
ניסית לקמפל או להריץ את הקוד?
10/02/2018 | 23:32
5
29
מן הסתם לא, אחרת היית רואה שהוא לא טוב.
 
אז מה רע בו?
1. אתה לא מאתחל שום משתנה, כלומר התוכנה שלך תעבוד על סתם ערכים אקראיים שיש במקרה בזיכרון בזמן שתריץ אותה.
 
2. אתה לא מציב את תוצאת החישוב בשום מקום, כלומר לעולם לא תקבל תשובה.
 
וכמובן, יש לך יותר מידי משתנים...
לצפיה ב-'קוד ב-C'
קוד ב-C
11/02/2018 | 12:05
4
29
לא, לא קימפלתי אותו, אני רק מתחיל ללמוד את הנושא ואני עדיין לא מבין לגמרי איך לעבוד על הקומפיילר..
לגבי הקוד, בכוונה לא כתבתי ערכים מסוימים, אני רק רוצה את הנוסחה הכללית אליה שמים משתנים.
אני אסביר מה הייתה המחשבה שלי. אני צריך לעשות X בחזקת Y, כלומר  לחשב X*X בכמות של Y פעמים. אני מתחיל ב SUM=X מכיוון שבסוף אני רוצה שהתוצאה תהייה SUM. פעם ראשונה התוצאה היא רק SUM, שזה כביכול בחזקת 1. הגדרתי את Z=1, כך שבלולאה הראשונה אם Y=1, כלומר החזקה היא 1, הלולאה תסתיים והתשובה תהיה SUM שזה כאמור X, וזה בדיוק X בחזקת 1. אם Y גדול מ-1, נגיד 3. אז הוא לא שווה ל-Z, ל-1, ולכן אני מכפיל את SUM ב-X ומוסיף עוד 1 ל-Z, כך יוצא ש-SUM הוא X*X שזה X בחזקת 2, ואז Z=2. עכשיו ה-Z שלי עדיין לא שווה ל-Y, 3 לא שווה ל-2, ולכן אני מכפיל שוב את SUM ב-X ומעלה 1 ל-Z, כך שיוצא ש-SUM הוא X*X*X, כלומר X בחזקת 3, ו-Z עולה ל-3. עכשיו הערך של Y, שהוא 3, שווה לערך של Z, ולכן הלולאה נגמרת והתוצאה היא ש-SUM הוא X בחזקת 3, וזה בדיוק לאן שרציתי להגיע.
כמובן שאני לא מתייחס לנקודה עם החזקה היא שלילית אלא בהנחה שהיא חיובית ומספר שלם בלבד, אבל עם הזמן אתקדם גם לזה..
לגבי ההערה השניה שלך, אני רוצה להדגיש שתוצאת החישוב שלי היא SUM ואני שם אותה בפונקצית PRINTF.
אני מצרף את הקוד מחדש בתמונה מכיוון שבהודעה הוא קצת התבלגן לי..
ניסיתי עכשיו לקמפל את הקוד, זה אכן לא הצליח לי וכתב לי רק 3. למה הוא לא מכפיל לי את SUM ב-X?
לצפיה ב-'זה לא טוב ללמוד שפת תכנות בלי לנסות.'
זה לא טוב ללמוד שפת תכנות בלי לנסות.
11/02/2018 | 14:31
3
31
כדי באמת ללמוד קוד חייבים "ללכלך את הידיים" ולנסות להריץ, לראות תוצאה, לשנות, לשחק.
 
כמו כן, בקוד אמתי אתה לא יכול "סתם להניח ערכים". אם אתה כותב "פסודו קוד" רק חושב על השלבים לפתרון בעיה עם עט ונייר, מותר לך לעשות את זה, אבל לא כשאתה מדבר עם מחשב.
 
כשאתה כותב קוד - אתה נותן הוראות למחשב, ואתה חייב לדייק בכל פסיק וכל נקודה!
 
המחשבה שלך נכונה, בגדול, אבל הביצוע שלה שגוי:
כתבת למחשב להכפיל sum ב-x אבל לא כתבת לו מה לעשות עם התוצאה של ההכפלה הזו, לכן המחשב זורק אותה לפח.
 
אני לא יודע מאיזה מקור אתה לומד, אבל לא ככה כותבים לולאת for.
 
משמאל לימין (חלקים מופרדים עם נקודה פסיק):
 
החלק הראשון נועד לאתחל את המונה.
רשמת בו את כל המשתנים שלך, אבל זה דבר חסר משמעות כי אתה לא עושה איתם כלום שם.
 
החלק השני נועד לבדיקת תנאי:
עקרונית, התנאי שלך נכון, אבל ליתר ביטחון הייתי משתמש בגדול מ- או קטן מ- במקום "לא שווה", כדי שאם תפספס איכשהו את הערך לא תתקע בלולאה אין סופית.
 
החלק השלישי נועד רק לקדם את המונה!
מה שאתה עושה בו במקום זה חישוב sum * x אבל אתה לא מציב את תוצאה החישוב חזרה ב-sum!
אם לא תציב - לא תקבל!
 
תשתמש ב-"עורך תוכן מלא" של תפוז, הוא מאפשר לך לצרף קוד כמו שצריך, ככה:
 for (z = 1; z <= y; z++) { //אתחול, בדיקה, קידום
  sum = sum * x; //ביצוע חישוב והצבת תוצאה
}
 
או לחילופין תצרף קוד בקובץ טקסט, או דרך אתרים כמו pastebin.com.
עם תמונה קשה לעבוד למי שרוצה לעזור לך.
 
בהצלחה!
לצפיה ב-'C'
C
12/02/2018 | 10:18
2
30
אני לומד מספר שנקרא SAMS TEACH YOURSELF C IN 24 HOURS, שאגב כמובן לוקח הרבה יותר מ-24 ללמוד ;)
כמובן שיש צורך בתרגול וכתיבת הקוד תוך כדי הלימוד, מצאתי קומפיילר באיזה אתר שנוח לי לעבוד איתו עד שאלמד כמו צריך את הקומפיילר שלי.
לגבי הקוד, עשיתי כמה ניסויים והצלחתי, אך יש קצת מה לשפר. באתחול הצבתי מספר. בבדיקה ניסיתי גדול שווה מ-Z אבל הוא לא נתן לי תוצאה טובה, ודווקא הלא שווה נתן לי את מה שרציתי.
עדיין עשיתי עם 4 משתנים כי זה יותר נוח, ניסיתי כמה פעמים עם 3 משתנים ועדיין לא הצלחתי. הקוד שרשמתי הוא: (הוספתי את הקוד דרך ההודעה, יש פה אפשרות להוסיף קוד, מקווה שזה בסדר..)
 #include <stdio.h>

main()
{
 int x,y,z,sum;
 z=1;
 y=5;
 sum=x;
 for(x=sum=2; y!=z; z++){
        sum*=x;
          }
  printf("X raise to Y is:%d\n",sum);

   return 0;
}
 
מה אתה חושב על הקוד? הצבתי X=2,Y=5, והוא נתן לי את התוצאה הרצויה.
בנוסף, חשבתי לשנות כך שעל המשתמש יהיה להקליד את המספרים אותם הוא רוצה להכניס למשוואה, ניסיתי כמה פעמים להוסיף ()getchar אבל עדיין לא הצלחתי, זה בתהליך :)
לצפיה ב-'אני מניח שזו שפת תכנות ראשונה שלך, אז אולי כדאי להתרחק'
אני מניח שזו שפת תכנות ראשונה שלך, אז אולי כדאי להתרחק
12/02/2018 | 12:11
27
מספרים עם שמות קשקשנים מידי.
אני לא מכיר את הספר הזה, ולפי הפתיח הוא מתיימר ללמד מ-0, אבל אולי כדאי לחפש משהו יותר יסודי.
 
לגבי הקוד:
1. קצת הטעיתי אותך, לא בכוונה, בתנאי שרשמתי.
אם היית מנסה לחשוב מה בדיוק "יצא לא טוב", היית רואה שביצעת הכפלה אחת מיותרת. כי זה לא => זה פשוט >.
 
כשהקוד לא עובד, לא מספיק להביא קוד אחר שכן עובד, צריך גם ללמוד ולהפנים למה הקודם לא עבד.
וזה נכון החל ממי שרק מתחיל ללמוד כמוך, עד למתכנת הוותיק ביותר!
 
2. כרגע הקוד נראה תקין, אבל נראה שאתה עדיין מבולבל בכל עניין ההצבות והשימוש בלולאה:
א) אתה מאתחל את z שמשמש אותך כמונה מחוץ ללולאה.
זה עובד, אבל זה לא יפה ולא נהוג.
 
ב) אתה עושה הצבה מיותרת לפני הלולאה: אתה מציב x ב-sum, אבל עוד לא שמת שום ערך ב-x!
 
ג) אתה עושה הצבה ל-x ו-sum במקביל (למעשה בשרשרת) במקום בו אתה אמור לאתחל את המונה.
השפה מתירה את זה, אבל לא נהוג לעשות כך, וממאילה אם היו שם ערכים קודמים, אתה פשוט תדרוס אותם.
 
יש לי הרגשה שהספר לא הסביר לך טוב איך עובד כל עניין המשתנים, ואני גם רואה אותך מנסה לכתוב הרבה "קיצורי דרך".
 
שפת C אכן מרשה קיצורים כאלה (כמו =*) ומפתחים מנוסים משתמשים בהם, אבל מי שרק מתחיל ללמוד לא אמור להיתקל או לגעת בהם, אלא אמור לכתוב קוד קריא וברור לפי הכללים.
 
תחשוב על זה כמו לימוד נהיגה: כשאתה רק מתחיל אתה נוהג עם 2 ידיים על ההגה, לעולם לא עובר מהירות מותרת, מעביר הילוכים בדיוק כשהמורה אומר וכו'
 
אחרי כמה שנים מאחורי ההגה, כשתצבור ניסיון ותרגיש בטוח בעצמך, סגנון הנהיגה שלך ישתנה.
 
3. אם אתה רוצה לתת למשתמש להכניס את הערכים, תלמד על פונקציה scanf.
רוב הספרים מלמדים אותה לפני לולאות, כי היא מאוד נוחה בתרגילים כאלה.
לצפיה ב-'והנה שני אתגרים בשבילך, אם תרצה לתרגל עוד:'
והנה שני אתגרים בשבילך, אם תרצה לתרגל עוד:
12/02/2018 | 12:14
23
1. תנסה לחשוב מה הכמות המינימלית של משתנים שצריך כדי לפתור את התרגיל הזה. 4 משתנים זו הכמות המירבית, לפני שאתה ממש מתחיל לבזבז מקום סתם.
 
2. תחשוב איך תוכל להרחיב את הקוד כדי לאפשר חישוב של כל חזקה חיובית שלמה, כלומר כולל חזקה 0 (כל מספר בחזקת 0 שווה 1).
לצפיה ב-'דסטרקטור'
דסטרקטור
04/02/2018 | 19:59
1
45
נניח שיוצרים מספר אובייקטים מאותו סוג בקוד מסוים, האם תהיה קריאה לדסטרקטור כאותו מספר הפעמים שהאובייקטים נוצרו?
לצפיה ב-'כן. ( לפחות ככה אמור להיות אם הקוד כתוב נכון )'
כן. ( לפחות ככה אמור להיות אם הקוד כתוב נכון )
04/02/2018 | 20:44
8
לצפיה ב-'בעיה בפענוח response ב express מי יכול לעזור?'
בעיה בפענוח response ב express מי יכול לעזור?
01/02/2018 | 13:52
1
42
הי, אני מנסה לשלוח response לבקשת get דרך express node.js
ומקבלת את ההודעה הזו :
Resource interpreted as Document but transferred with MIME type application/json
 
איך פותרים?
לצפיה ב-'הטעות בשורה 3'
הטעות בשורה 3
06/02/2018 | 04:21
21
ברצינות, איפה הקוד?
לצפיה ב-'שאלה לגבי SERVLET בג'אווה האם אפשר שכל בקשה תחכה לסיומה של'
שאלה לגבי SERVLET בג'אווה האם אפשר שכל בקשה תחכה לסיומה של
29/01/2018 | 16:06
3
41
הבקשה הקודמת
אותו ה SERVLET מכניס נתונים לדטה בייס  הוא מספיק מהיר אבל חשוב לי הסדר של מה שייכנס
תודה
לצפיה ב-'אי אפשר וזה לא אמור להיות ככה'
אי אפשר וזה לא אמור להיות ככה
30/01/2018 | 11:09
30
בקשות HTTP מגיעות בצורה אסינכרונית לשרת, ואין דרך לדעת מי תגיע קודם ומי תגיע אחר כך (אם בכלל).
גם אם תעשה את מה שאתה רוצה באמצעות מנעולים או תורים, עדיין לא תוכל להיות בטוח בסדר ההכנסה:
בהחלט יכול להיות שמשתמש א' לחץ על העכבר לפני משתמש ב', ועדיין בקשה ב' תגיע לפני בקשה א'.
לצפיה ב-'אפשר להכניס את הנתונים לתור'
אפשר להכניס את הנתונים לתור
06/02/2018 | 04:22
11
אבל היות ולא ציינת איך הסדר מתבצע, אי אפשר להגדיר מיון.
לצפיה ב-'אולי התכוונת לבעיה של ביצוע מספר פעולות עבור בקשה אחת ביחד?'
אולי התכוונת לבעיה של ביצוע מספר פעולות עבור בקשה אחת ביחד?
08/02/2018 | 16:52
12
אם הבעיה היא סדר של מספר פעולות שקשורות לבקשה שבאמצע קורים דברים מבקשה אחרת אז אפשר להשתמש בטרנזאקציה - transaction.
 
transaction או מצליחה או נכשלת כולה ומתבצעת כאילו אף אחד אחר לא השתמש ב-DB מהזמן שהיא התחילה ועד שהסתיימה.
 
קח בחשבון שלפעמים (תלוי בסוג ה-transaction וסוג ה-DB) זה בדיוק כמו להשתמש במנעול שרק לקוח אחד יכול לבצע פעולות והשאר מחכים שיסתיים. אם זה כך אז זה יכול לגרום לבעיות ביצועים או ל-timeoutים לאלו שמחכים (כלומר לא יחכו אלא פשוט לא יצליחו לבצע את הפעולה).
לצפיה ב-'שפות תכנות למתחיל ומאיפה ללמוד?'
שפות תכנות למתחיל ומאיפה ללמוד?
26/01/2018 | 16:51
3
43
היי
מעוניין להתחיל ללמוד שפות תכנות או לפחות שפת תכנות ביחיד:), איזו שפה כדאי להתחיל ממנה ואם אפשר קישורים למדריכים?
לצפיה ב-'למה אתה מעוניין בזה?'
למה אתה מעוניין בזה?
27/01/2018 | 19:34
40
אני שואל, כי אין באמת תשובה אחת מוחלטת לשאלה שלך. והתשובה גם תלויה במטרה.
 
כמובן, לא לומדים כמה שפות במקביל.
צריך להתחיל מאחת.
אבל אם אין לך ידע בתחום מחשבים בכלל, להתחיל משפת תכנות לא נכון.
צריך קודם הבנה איך המחשב עובד.
 
אני נוטה להמליץ לאנשים להתחיל ללמוד שפת C.
זו שפה וותיקה מאוד, ולוקח זמן להשיג בה תוצאות נראות לעין (לכתוב תוכנה ממש מעניינת), אבל כשלומדים אותה, לומדים על הדרך דברים חשובים על מבנה ועבודת המחשב שנחוצים לשימוש בכל שפת תכנות.
 
והדרך שאני ממליץ ללמוד היא בעזרת ספר שאומנם נחשב עתיק, אך לדעתי עדיין מצוין (משהו נדיר מאוד בעולם התכנות):
 
שפה נוספת שלא פעם ממליצים למתחילים היא שפת Python:
זו שפה מודרנית וקלה לשימוש, אך כזו שמבודדת אותך מה-"בפנוכו" של המחשב.
 
מצד אחד קל להרים בה דברים יפים כדי שתראה תוצאות, ומצד שני, אם אתה לומד רק אותה אתה עלול לפספס דברים.
 
אין לי המלצה לחומר לימוד ספציפי לשפה הזו, אבל יש מלא באינטרנט.
החל מסרונים ב-youtube (למי שמתחבר לזה) ועד ספרים וקורסים מכוונים בחינם ובתשלום.
 
מה שלא תבחר, בהצלחה!
לצפיה ב-'אחד הדברים שהכי קל למצוא באינטרנט זה חומר על תכנות'
אחד הדברים שהכי קל למצוא באינטרנט זה חומר על תכנות
29/01/2018 | 07:20
25
חפש tutorial ושם שפה בגוגל ויעלו המון תוצאות.
אם אתה לא בטוח איזו שפת תכנות אתה רוצה ללמוד חפש גם את זה בגוגל ויעלו המון תוצאות.
 
אפשר גם להתחיל קצת מ-wikipedia בתור רקע. לקרוא מה זו שפת תכנות וקצת לגלוש הלאה לערכים קשורים בכדי להבין עוד מסביב
לצפיה ב-'מהנסיון האישי שלי - סרטונים שעזרו לי לקבל רקע'
מהנסיון האישי שלי - סרטונים שעזרו לי לקבל רקע
06/02/2018 | 00:03
20
הם לא מלמדים שפת תיכנות אבל מדברים קצת על הרקע. כמובן שזה לא הכל, אבל זה נחמד וידידותי להתחלה. לי זה עזר.
 
לצפיה ב-'מנצל קבוצה - משרת מפתח C++ נפתחה אצלנו'
מנצל קבוצה - משרת מפתח C++ נפתחה אצלנו
28/01/2018 | 11:40
21
שלום רב,
מגייסים אצלנו מפתחי C++ מצויינים.
מוזמנים לנסות ולשלוח קורות חיים, או להפיץ את השמועה.

חברה מעולה בהרצליה פיתוח.
קו"ח או פרטים נוספים - omer.perry@gmail.com.

DESCRIPTION
Full life cycle development of several key applications including: Technical and statistical research, design, coding, integration and maintenance

Developing and integrating new and existing software as part of a large-scale system

Emphasis on C++ development

Working independently but as a part of a strong and collaborative team

REQUIREMENTS
B.Sc. in Computer Engineering or Computer Science (preferably cum laude, from a leading university)

At least 4 years of experience in C++ development

Experience in working on complex and large-scale systems

Self-motivated and fast learner

CV to omer.perry@gmail.com

בהצלחה !
לצפיה ב-'שאלה בשפת C מערכים (חד ממדי)'
שאלה בשפת C מערכים (חד ממדי)
25/01/2018 | 19:52
4
48
שלום אני צריך עזרה בבקשה בכתיבת התכנית אני ממש תקוע ולא יודע איך אני ממשיך מכאן לא עובד לי הקוד ( אני לא מוצא אלגוריתם מתאים למצאית סדרות ולמנות כמה אחדים יש בכל סדרה ולמנות כמה סדרות שהן זהות התמונה צורפת וגם הקוד תודה רבה למי שעוזר
לצפיה ב-'מה הבעיה בריצה על מערך?'
מה הבעיה בריצה על מערך?
26/01/2018 | 04:19
3
18
לצפיה ב-'שפת C'
שפת C
26/01/2018 | 09:56
2
37
אני מריץ את זה על מערך אבל אני לא יודע איך למצוא את הסדרות שמסתימות ב0 כלומר למנות אותם (לא מוצא אלגוריתם) אני לומד לבד ואני מתחיל בנושא הזה
תודה רבה  
לצפיה ב-'אז תעזוב רגע את שפת C, ותחשוב מה היית עושה אם היית צריך'
אז תעזוב רגע את שפת C, ותחשוב מה היית עושה אם היית צריך
26/01/2018 | 13:37
1
30
לספור סדרות ידנית.
 
היות ואתה צריך לרשום כמות של מספר פריטים (סדרות באורך שונה), כנראה היית מצייר לך טבלה, עם שתי עמודות, שאחת מציינת אורך של סדרה, והשנייה כמה פעמים ראית סדרה באורך כזה.
 
אחרי זה, היית מתחיל לספור אחדות שבין 0 אחד לאחר, ורושם לך בצד כמה אחדות ספרת.
 
אתה מבין את הכיוון?
 
תתחיל לרשום סדר פעולות בעברית פשוטה.
זה נקרא "פסודו קוד".
אחרי שתצליח לעבוד לפי הסדר הרשום ולחשב עם דף ועט כמה סדרות יש בכל אורך, תראה שקל מאוד לתרגם את הצעדים שרשמת לקוד.
 
ואם עדיין תתקשה, תבוא לכאן ותרשום את הצעדים.
לצפיה ב-'.'
.
26/01/2018 | 19:44
27
הסתדרתי תודה
לצפיה ב-'התייעצות על שיטת העבודה בפרוייקט עם Java – MongoDB '
התייעצות על שיטת העבודה בפרוייקט עם Java – MongoDB
26/01/2018 | 13:23
12
24
שלום לכולם.
**אשמח אם אפשר לא לענות בזמן השבת , תודה**
**השאלות שלי הן בסוף אבל הקדמתי כדי שיהיה אפשר להבין מה הרקע)
יש לי כמה דילמות לגבי פרוייקט שאני מפתח והצורה שלסדר את התוכנה. קראתי וחקרתי על זה והגעתי לכמה מסקנות אך עדיין אני לא בטוח שזו הדרך הנכונה, והייתי שמח לדעת דברים שלא נעשו נכון, כדי שאדע לעשות refactor בשלב הזה ולא אח"כ.
 
בגדול זו תוכנה שאמורה להיות משחק אונליין של מולטי משתתפים, לא משחק כבד של 3D - משחק של אותיות וכיו"ב.
אני מתחיל בפיתוח מערכת מרובת משתתפים. כוונתי בזה גם שהמערכת תהיה כללית ותוכל לשמש אותי גם לפרוייקטים אחרות, ולDBS אחרים.
אני גם מתחיל לפתח ברמת הCore לCMD ואח"כ אפתח את זה בהתאם לפלטפורמה רצויה כגון Web/Mobile ועוד...
התוכנה ברמת השאילתות - אני לא חושב שהיא אמורה לעשות המון ולאחסן הרבה מידע ברמת המשתמשים וכאלה אבל ודאי שיהיה מידע לא מבוטל גם לכל משתמש כגון – נצחונות הפסדים נקודות, ובטח ברמת המערכת עצמה של הניהול משחקים ומידע וכיו"ב . אני חושב שהיחס בין הread to write הוא די שווה .
הדילמות שלי כרגע הם בעיקר ברמת הקשר עם הDB .
כדי שהמערכת תהיה מותאמת לשינוי DB בעתיד, אני מפתח בנפרד DBConnector שמכיל פונקציות ששולחות את השאילתות לDB , ואותם אני מכניס במערכת עצמה. ככה שבעתיד זה יהיה כמו API מסויים שרק צריך להתאים לו את הפונקציות המסויימות של הDB .
לא כל כך ידעתי אם לעשות את הconnector סטטי ובסוף החלטתי שכן, כי הוא מכיל פונקציות קבועות, של שירות, אני יודע שאולי אני טועה בזה.
כמו"כ קראתי במונגו שכדאי לעשות את הconnector סינגלטון, כדי לא ליצור הרבה pool , ושזה תומך בmulti threating .
Your instance of MongoClient (e.g. mongoClient above) will ordinarily be a singleton in your application.
דבר נוסף שלא הייתי סגור עליו זה האם לגרום לתוכנה לפתוח connection שישאר פתוח כל הזמן או בכל שאילתא לDB לפתוח ולסגור.
בסוף החלטתי שבכל קריאה לDB תהיה פונקציה פנימית שיוצרת קשר לdata , מבוצעת השאילתא המסויימת , ונסגר הקשר . כמו לדוגמא בקובץ DBConnector שצירפתי בפונקציה-
createNewUser(String userName, String email, String password)
יצרתי איזה פונקציה שמייצרת singleTon של האובייקט הזה, אבל אח"כ הבנתי שלא עשיתי נכון כי הconnection מתייצר כל פעם מחדש. (ראה את הפונקציה DBConnector.connectDB ) .
השאלות שלי הם :
1- האם לעשות את הDBconnector סטטיק זה נכון, או הוא גם צריך להיות instance . (בכלל לחדד את העניין מתי צריך להיות סטטיק ומתי לא, כי גם על המערכת עצמה יש לי את הדילמה הזו) .
2- הדרך הנכונה לייעל את הזיכרון היא ליצור פתיחה וסגירה בכל שאילתא, ואם נגיד השיטה הזו תתבצע לעשות את ה MongoClient סינגלטון ? (כי חשבתי שאולי זה או זה או זה, ואם זה יהיה סינגלטון במקרה תיאורתי של כמה משתמשים משתמש אחד יפתח ואחר במקביל יפתח את הclient ואז אחד יסגור והפונקציה של השני לא תתבצע) .
3- או שאולי הדרך הנכונה זה לפתוח Connection שנשאר פתוח כל זמן שהתוכנה רצה, ובדרך הזאת לעשות אותו סינגלטון שלא נוצר כל פעם אחד חדש .
 
אני מצרף כאן 2 קבצים של הDbConnector ושל הSystem כדי להמחיש את השיטת עבודה שלי.
תודה מראש לכל העונים ,
ואשמח לתשובות עניניות
בבקשה אל תשלחו אותי לקורסים למדעי המחשב, כי זה פחות יעזור אני יודע שיש השלמת חומר שצריכה להעשות ואני יכול להבין רק דרך העשייה.
 
שבת שלום
DBConnector
 
MultiUsersSystem
 
 
 
לצפיה ב-'המתנתי שיענה לך מישהו שמכיר את mongoDB כי לי אין ניסיון'
המתנתי שיענה לך מישהו שמכיר את mongoDB כי לי אין ניסיון
04/02/2018 | 09:03
11
25
כלל עם mongo וניסיון מועט ביותר עם DB אחרים.
 
אז הנה דעה כללית בנושא:
אתה עושה טעות בכך שאתה מנסה לתכנן רכיב גישה ל-DB ודרך שימוש ב-DB לפני שתכננת עד הסוף את האפליקציה האמתית שלך - זו שתשתמש ב-DB.
 
בסה"כ, לכל מנגנוני ה-db כבר יש שכבות אבסטרקציה נחמדות עבור Java, וזה שתוסיף עוד שכבה דקה משלך לא יעזור לכלום אם תנסה להיות גינרי מידי.
 
אתה צריך קודם כל לתכנן איך ומתי המשחק שלך ירצה לגשת ל-DB, ואלו פעולות הוא ירצה לעשות שם, לפני שאתה כותב את המעטפת.
רק אז תוכל לכתוב משהו טוב ושימושי באמת, שלא יהווה סתם שכבת קוד מיותרת.
 
זכור גם, שה-client של המשחק, לא משנה אם הוא רץ בתוך דפדפן, בטלפון, או כיישום שולחני, לעולם לא ייגש ישירות ל-DB שלך.
אם תאפשר לו - זה יהיה אסון.
 
במקומך, הייתי מתרכז קודם בצד שרת - אפליקציה שתרוץ על השרת שלך ותקבל בקשות מה-client של המשחק.
איך היא תנהל את כל השיח ישפיע על הדרך בה היא תנהל את ה-DB.
 
לשאלות הספציפיות שלך:
1. אישית, אני חושב שלעשות את ה-DBConnector סטטי זה לא נכון.
ב-Java, רק פונקציות שירות בסיסיות למדי הן סטטיות.
היות ו-DBConnector אצלך מטפל במשאבים "חיים" - חיבור ל-DB שיש לפתוח ולסגור, נכון שהוא יהיה instance.
 
ככלל - הימנע משימוש במתודות סטטיות לכל דבר שמשויך אליו מידע משלו.
 
שים לב, ש-Singleton לא סטטי!
אבל כמובן, שזו רק תבנית, ובסוף דיזיין נכון תלוי בשימוש התוכנן.
 
2. זה תלוי לחלוטין ב-DB שאתה משתמש בו.
היצמד לתיעוד של היצרן, או ברר בפורום הרלוונטי שם מכירים את ה-DB היטב.
 
3. זכור ש-Singleton הוא יחיד לאורך כל חיי התוכנה שלך.
זה ה-Pattenr המקובל.
אם אתה צריך לייצר כמה מהם, כנראה שה-pattern לא ממש מתאים.
 
בהצלחה!
לצפיה ב-'תודה רבה על העצות '
תודה רבה על העצות
04/02/2018 | 18:57
8
11
אתה צריך קודם כל לתכנן איך ומתי המשחק שלך ירצה לגשת ל-DB, ואלו פעולות הוא ירצה לעשות שם, לפני שאתה כותב את המעטפת.
רק אז תוכל לכתוב משהו טוב ושימושי באמת, שלא יהווה סתם שכבת קוד מיותרת.

זה נשמע עצה מצויינת גם תעזור לי בתיכנון וגם יקל עליי בלהגיע לקוד. מה שמטריד אותי בזה, זה שנראה לי שאני אתחיל וארצה לראות דברים שנשמרו כמו משחקים של משתמשים וכאלה ויהיה קשה לתפקד על זה וליצור את כל הנתונים כל פעם מחדש בhardCode . (מן הסתם ארצה לבדוק שהמשתמש רואה את הנתונים שעברו, ושהמערכת יודעת ליצור משחקים בין כמה משתמשים וכיו"ב). אז אתה מתכוון שאת השלבים האלה להשאיר לסוף ?
 אישית, אני חושב שלעשות את ה-DBConnector סטטי זה לא נכון. וכו'"
אז לגבי המערכת עצמה שנותנת לאובייקטים של התוכנה פונקציות שירותיות של פעולות שאפשר לעשות, יהיה נכון לכאורה לעשות את זה סטטי לא ?
זכור גם, שה-client של המשחק, לא משנה אם הוא רץ בתוך דפדפן, בטלפון, או כיישום שולחני, לעולם לא ייגש ישירות ל-DB שלך.
אם תאפשר לו - זה יהיה אסון.
 
כן זוכר :) אימצתי את זה מאז שאמרת לי את זה בהודעה אחרת.
 
ערב  טוב
לצפיה ב-'לא משנה מאיפה תתחיל לבנות את המערכת,'
לא משנה מאיפה תתחיל לבנות את המערכת,
04/02/2018 | 19:34
7
26
תמיד יהיה לך חלק "חסר" שתצטרך לזייף כדי לבצע בדיקות.
 
יש דרכים שונות "לזייף" הן את צד לקוח, הן את צד שרת, והן את ה-DB.
בזמנו, כשהתחלתי לפתח תוכנת לקוח לפני שהיה שרת בכלל שעינה, שמתי קבצים סטטיים עם JSON בתוכם, שידמו תשובה נכונה משרת שאמור היה לבנות את התשובות שלו דינמית מתוך DB.
 
אבל ל-clinet זה לא היה משנה. הוא לא יודע אם יש קובץ סטטי או קוד עם DB בצד שני.
התפקיד שלו היה לפרסר ולפעול בתאם, וזה כל מה שהייתי צריך לזמן פיתוח.
 
את השרת שמנגיש את הקבצים אפילו הייתי מרים מקומית על מחשב פיתוח שלי עם מודול Python בלי להסתבך עם דברים כמו Apache או nginx (אני אפילו לא מזכיר את IIS יימחה שמו וזכרו!)
לצפיה ב-''
05/02/2018 | 12:49
6
19
סתם ככה שאלה לא קשורה אבל אתה בטח יודע
יש משהו לא טוב בפרקטיקה הזו? -   במקרה שיש כמה cases in method , להעביר את המצב עם string . לדוגמא:
 
  //return user ID by identification (mail, userName) 
public void getUserID(String identification, String key){
//get the object id and return it as string either by mail or identification

if(key.equals("email")){
//do something
}
else{
//do something else

}




}
 
לצפיה ב-'כמה דברים:'
כמה דברים:
05/02/2018 | 21:33
5
14
1. השוואת מחרוזות היא "פעולה יקרה", אז תשאל את עצמך אם ה-key שלך באמת צריך להיות מחרוזת.
אולי עדיף לו להיות קבוע מספרי, שאתה עדיין תראה בקוד כמלל, אבל המחשב יוכל להשוות כ-int בקלות.
 
2. אם בכל זאת החלטת על string, תשקול לעשות השוואה case insensitive כדי לא ליפול בגלל גודל אות.
compaireIgnoreCase.
 
3. ב-Java משפט switch תומך במחרוזות החל מגרסה 7.
אז אם יש לך כמה אפשרויות על תעשה הרבה if else if אלא תשתמש ב-switch עם case.
 
4. אם ה-do something זה לשלוף או למלא ערך לפי ה-key, שקול שימוש ב-HashMap או מבנה אחר מסוג "מילון" שיחסוך לך את ה-if וישלוף ערך לפי מפתח.
זה יהיה הרבה יותר יעיל, קל, ויפה!
לצפיה ב-'תודה '
תודה
05/02/2018 | 23:58
4
8
רק לא הבנתי את 1.
אתה מתכוון שאתן keys של מספרים ? (זה אפשרי אבל יוריד את רמת הקריאות וההבנה של הקוד) .
 
או שאפשר להמיר string של אותיות לint ? כמו פה ?
לצפיה ב-'זה ממש לא יוריד את הקריאות וההבנה, להפך!'
זה ממש לא יוריד את הקריאות וההבנה, להפך!
06/02/2018 | 00:56
3
13
אם אני מבין אותך נכון, אתה רוצה לממש פונקציה שמקבלת 2 פרמטרים:
1. פרמטר כלשהו שמזהה משתמש
2. ערך קבוע בתוכנה שלך לפיו אתה מפרש את הפרמטר הראשון.
 
לערך כזה קוראים "דגל" (flag), וכמעת אף פעם לא משתמשים במחרוזת לצורך כזה, אלא אם יש סיבה מיוחדת שהופכת את זה לנוח בתוך הקוד של הפונקציה.
 
שימוש במחרוזת יגרור מספר בעיות:
1. בכל מקום בקוד שתשתמש בו, תצטרך לכתוב ידנית את המחרוזת, ותוכל בקלות לעשות שגיאת כתיב.
הקומפיילר לא יתקן אותך, ויהיו לך באגים שתתקשה לתקן.
 
מה יקרה אם במקום אחד תכתוב email ובמקום אחר תתבלבל ותכתוב emale?
 
2. במקום לבצע השוואה אחת על ערך מספרי, רק בשביל לבדוק את המילה email המחשב יבצע לפחות 5 השוואות.
יותר אם תנסה להשוות בלי להתחשב באות גדולה או קטנה.
 
3. לא תהיה דרך קלה וברורה לדעת אלו דגלים קיימים, מה שיקשה על הבנת הקוד ועל הרחבה שלו, במידה ותרצה להוסיף דגלים (או להפך, להוריד דגל שהפך ללא רלוונטי).
 
יש שתי דרכים מקובלות ונוחות לממש דגלים:
שיטה ראשונה: להשתמש ב-emun
 public enum UserIdType {
   EMAIL, FACEBOOK, GOOGLE, USERNAME
}

public void getUserID(String identification, UserIdType key) {
   switch(key) {
       case UserIdType.EMAIL:
           //do something
           break;

       case UserIdType.FACEBOOK:
           //do something else
   }
}
 
לשיטה הזו מספר יתרונות:
  • הקומפיילר תמיד יבדוק את האיות שלך, ואם תשגה בשם הדגל תקבל שגיאת קומפילציה.
     
  • הקומפיילר יוודא שרק דגלים שהגדרת ישלחו כפרמטר לפונקציה, וכל דבר אחר יגרור שגיאת קומפילציה.
     
  • קל להבין אלו דגלים קיימים, הם כולם במקום אחד ובנויים בצורה אחידה.
    סביבות פיתוח יאפשרו גילוי והבנה שלהם בלחיצת כפתור (במקום לחפש מחרוזות בכל מיני מקומות בקוד או לרדוף אחרי הערות שאולי בכלל שכחת לעדכן)
     
  • אם תכתוב משפט switch ותשכח לטפל באחד הדגלים, סביבת הפיתוח תתריע בפניך, כי היא יודעת בדיוק אלו case יכולים להיות.
לשיטה הזו יש גם חסרונות:
  • אי אפשר לשלב כמה דגלים בפרמטר אחד.
    (זה כנראה לא רלוונטי לדוגמה הספציפית שלך, אבל יש מקרים בהם זה נחוץ)
     
  • אי אפשר לעשות חישובים מתמטיים או חישובי סיביות על הדגלים.
     
  • יותר מסובך לשמור דגל כזה בתוך קובץ או לשלוח אותו ל-DB.
 
כאן נכנסת לתמונה שיטה שניה: להשתמש בקבועים מטיפוס int
 ​public static final int EMAIL = 1;
public static final int FACEBOOK = 2;
public static final int GOOGLE = 3;
public static final int USERNAME = 4;

public void getUserID(String identification, int key) {
   switch(key) {
       case EMAIL:
           //do something
           break;

       case FACEBOOK:
           //do something else
   }
}

[לחץ וגרור להזזה]
 
השיטה הזו מאפשרת לשלב דגלים בעזרת אופרטור or |, לעשות פעולות מתמטיות על דגלים וכמובן לשמור דגל בקלות בקובץ או ב-DB.
 
אבל, אתה מאבד מספר יתרונות מהשיטה הקודמת:
  • תצטרך לממש בעצמך בדיקה עם ערך הדגל הוא חוקי, הקומפיילר לא ידע אלו מספרים מותר לשלוח לפונקציה.
  • כנ"ל במשפטי switch: תצטרך לוודא בעצמך שכיסית את כל האפשרויות.
     
  • אם לא תזהר, הגדרת הדגלים עלולה להתפזר למקומות שונים, מה שיקשה על הבנת הקוד.
 
אני חושב שלמקרה שלך השיטה הראשונה הכי מתאימה, אבל בלי לראות את הקוד המלא של הפונקציה, או לפחות להבין מה היא אמורה לעשות, קשה לדעת מה השיקולים שלך.
 
תבחר בעצמך לפי יתרונות וחסרונות, אבל בכל מקרה הייתי ממליץ להתרחק משימוש במחרוזות למקרה הזה!
לצפיה ב-'וואוו תודה על התשובה המפורטת'
וואוו תודה על התשובה המפורטת
06/02/2018 | 02:36
1
5
אני לגמרי אקח את זה בחשבון בפעולות האלו.
 
לגבי הפונקציה הזו, אני מנסה בה להשיג את הID של המשתמש מהDB ע"י או אימייל או שם משתמש.
 
בסוף זה יצא לי ככה שאני לא צריך if-else כי זה ממש השם של הfield שאני מבצע עליו שאילתא (לא משנה מאיזה צד), אז אולי עדיף לי להשאיר את זה ככה .
 
 public String getUserID(String identification, String key){
//get the object id and return it as string either by mail or identification
Document query = new Document().append(key, identification);
Document document = collection.find(query).first();
String objectID = document.get("_id").toString();
return objectID;



}
 
לצפיה ב-'שמחתי לעזור.'
שמחתי לעזור.
06/02/2018 | 11:25
9
אם הקוד שלך נראה כמו בדוגמה האחרונה, בהחלט הגיוני ונכון להשתמש במחרוזת.
 
בגלל זה כל הזמן סייגתי את דברי שהכל תלוי במימוש הפונקציה.
עדיין, אני ממליץ לכתוב את המחרוזת במקום אחד בלבד בתור ערך של קבוע (static final) מכמה סיבות:
 
1. זה ייתן לך השלמה אוטומטית וימנע שגיאות כתיב.
2. זה יקל עליך להחליף את המחרוזת אם תצטרך (שינוי במקום אחד במקום הרבה מקומות בקוד)
3. זה יאפשר לתת למחרוזת שם שמתאר אותה טוב יותר או להוסיף הערה על משמעות בקוד בלי להוסיף לך הרבה הקלדות מיותרות בכל שימוש בה.
לצפיה ב-'הודעה בטעות '
הודעה בטעות
07/02/2018 | 18:45
3
לצפיה ב-'אגב סינגלטון לא סטטי אבל מייצרים אותו בדרך סטטית , '
אגב סינגלטון לא סטטי אבל מייצרים אותו בדרך סטטית ,
04/02/2018 | 19:12
1
6
אין ברירה אחרת , לא ?
לצפיה ב-'Singleton ב-Java בד"כ מוחזר ממתודה'
Singleton ב-Java בד"כ מוחזר ממתודה
04/02/2018 | 19:29
14
סטטית שבודקת אם כבר קיים instanse שלו ומחזירה אותו, ואם עדיין לא קיים, מייצרת ומאתחלת את ה-instance.
 
לפעמים, האתחול נפרד מהבקשה לקבל instance תלוי בדרישות המערכת.
 
אבל אובייקט ה-singleton עצמו אינו סטטי. הוא instance לכל דבר ועניין, רק שיש אחד ממנו.
לצפיה ב-'קוד HTML עם תמונת רקע'
קוד HTML עם תמונת רקע
24/01/2018 | 13:05
33
היי, נכנסתי למלא מדריכים וג'נרטורים ובאף אחד לא הצלחתי לקבל קוד HTML עם תמונת רקע, מישהו יכול בבקשה לכתוב לי קוד שרק אדביק בו URL? זה מיועד ללשונית HTML בפייסבוק.
לצפיה ב-'עזרה בjava'
עזרה בjava
20/01/2018 | 21:52
2
57
שלום,
1. רצית לדעת איך אני כותב מתודה שמחזירה רשימה מקושרת.
2. ואיך אני מכניס איבר לרשימה מקושרת.
 
לצפיה ב-'הנה'
הנה
29/01/2018 | 14:46
1
36
 List<String> myMethod() {
  List<String> list = new LinkedList<>()
  list.add("abcd")
  return list;
}

 
לצפיה ב-'עזרה בjava'
עזרה בjava
08/02/2018 | 18:46
11
תודה רבה
לצפיה ב-'typeid ו-serialiization'
typeid ו-serialiization
11/01/2018 | 14:27
1
52
1) לא הבנתי באיזה אופן שימוש ב-typeid עוזר לזיהוי הטיפוס בזמן ריצה , ומה בין זה לבין שימוש ב-virtual בפולימורפיזם.
2) אשמח מאוד לקבל הסבר אודות seriialization ולשם מה יש בה בעצם צורך.
לצפיה ב-'ככה:'
ככה:
12/01/2018 | 12:04
26
1) נניח שיש לך מחלקה Animal וממנה יורשות 2 מחלקות:
Cow ו-Fox.
משתמש יוצר חיות שונות בתוכנה בזמן שימוש בה, וכולן מאוחסנות במערך של Animal.
 
אבל, בפונקציה מסוימת אתה צריך לדעת אם יש לך פרה או שועל בתא מסוים במערך.
איך תעשה את זה?
אתה מפעיל את typeid על האובייקט הרצוי, והוא נותן לך מידע אמתי על הטיפוס שלו.
מידע זה כולל את השם של המחלקה שממנה נוצר.
 
הנה דוגמת קוד:
 
זה הצד השני של פולימורפיזם: ירושה מאפשרת לך לעלות לרמה "כללית" של טיפול במחלקות שונות, ו-typeid מאפשר לך לרדת חזרה לאבחנה פרטנית בין הסוגים.
 
2) serialization הוא תהליך של שמירה של אובייקטים בזיכרון לתוך אחסון לא נדיף.
נניח יש לך תוכנה של אנשי קשר.
בתוכה יש מחלקה של Person ששומרת את כל פרטי הקשר של אדם אחד.
 
המשתמש הזין את הפרטים, התוכנה יצרה אובייקט Person ומחזיקה אותו בזיכרון, אבל מה הלאה?
מה יקרה כשהמשתמש ירצה לצאת מהתוכנה או לכבות את המחשב?
 
כאן בדיוק נכנס עניין ה-serialization:
אתה כותב קוד שישמור את תוכן אובייקט Person לקובץ בדיסק בצורה כזו שבפעם הבאה שמשתמש נכנס לתוכנה שלך, הוא יוכל לשחזר את האובייקט במדויק ולראות את המידע.
 
יש כאן קאצ' קטן:
הרעיון האמתי מאחורי serialization הוא לשמור אובייקטים בצורה כזו ששחזור שלהם יהיה אוטומטי:
כלומר, התוכנה שלך לא ממש צריכה לדעת שהיא קוראת קובץ של אנשי קשר.
הקובץ כולל מידע הן על סוג האובייקט והן על שדות שלו, כך שקוד גינרי אחד יכול לשחזר מקובץ אובייקטים שונים בעלי מבנה שונה.
לצפיה ב-'פונקציה חברה לדוגמא'
פונקציה חברה לדוגמא
09/01/2018 | 23:35
8
52
לגבי הפונקציה החברה המופיעה בהגדרת המחלקה הבאה:
 class Point
{
int x, y;
public:
Point(int x = 0, int y = 0) : x(x), y(y) {}

bool equals(const Point& other) const
{
cout << "In Point::equals\n";
return x == other.x && y == other.y;
}

friend bool equalPoints(const Point& p1, const Point& p2)
{
cout << "In equalPoints(global)\n";
return p1.x == p2.x && p2.y == p2.y;
}
};
 
למה בעצם חשוב להגדיר את פונקציה כפונקציה חברה? מה היה קורה אם היא לא הייתה חברה?
לצפיה ב-'היית מקבל שגיאת קומפילציה!'
היית מקבל שגיאת קומפילציה!
10/01/2018 | 00:16
6
24
חבל שאתה ישר רץ לפורום במקום לבדוק בעצמך.
זה קוד שיכולת לקמפל, וללמוד מהודעת השגיאה שלו.
 
אולי דילגת על זה, או אולי שכחת, אבל ב-++C, אם אתה לא מציין הרשאת גישה של איבר מחלקה או מתודה, ברירת המחדל היא private.
כלומר, רק למתודות של Point יש רשות לגשת ל-x ו-y.
לצפיה ב-'לא הבנתי למה הכרחי לציין שהפונקציה הזאת היא חברה.'
לא הבנתי למה הכרחי לציין שהפונקציה הזאת היא חברה.
10/01/2018 | 08:45
5
4
לצפיה ב-'אני חושב שהבנתי מה מבלבל אותך:'
אני חושב שהבנתי מה מבלבל אותך:
10/01/2018 | 10:19
4
22
הקוד הזה לא כתוב טוב בתור דוגמה.
 
אם תוריד את המילה friend הוא עדיין יתקמפל, ואפילו הפונקציה תעבוד, אבל אם יש לך קוד אחר שקורא לפונקציה הוא ישבר.
 
כדי שתבין את הדוגמה, הקוד צריך להראות כך:
 class Point
{
   int x, y;
public:
   Point(int x = 0, int y = 0) : x(x), y(y) {}

   bool equals(const Point& other) const
   {
       cout << "In Point::equals\n";
       return x == other.x && y == other.y;
   }

   friend bool equalPoints(const Point& p1, const Point& p2);
};

bool equalPoints(const Point& p1, const Point& p2)
{
   cout << "In equalPoints(global)\n";
   return p1.x == p2.x && p2.y == p2.y;
}

int main(int argc, char **argv) {
   Point p1, p2;

   cout << equalPoints(p1, p2);

   return 0;
}

בדוגמה כתבו את equalPoints בתוך גוף המחלקה, אבל היא למעשה פונקציה חיצונית, שאתה מפעיל בלי אובייקט של מחלקה.
 
בתור פונקציה חיצונית, אין לה אפשרות גישה לאיברים פרטיים, אלא אם מכריזים עליה כ-friend.
 
הדוגמה מטעה קצת בכך שהיא גורמת ל-equalPoints להראות כמו עוד מתודה בדומה ל-equals.
לצפיה ב-'עדיין לא ברור לי הפונקציה friend הנ"ל צריכה להיות כזאת'
עדיין לא ברור לי הפונקציה friend הנ"ל צריכה להיות כזאת
10/01/2018 | 21:54
3
12
או מה בתוכן שלה מצריך את הגדרתה ככזאת.
לצפיה ב-'אתה לא רואה שהפונקציה ניגשת לאיברים x ו-y של Point?'
אתה לא רואה שהפונקציה ניגשת לאיברים x ו-y של Point?
11/01/2018 | 08:03
2
13
אלה איברים פרטיים ששום פונקציה מחוץ למחלקה לא יכולה לגעת בהם.
 
קח את דוגמת הקוד שהבאתי לך, תוריד את השורה עם friend ותנסה לקמפל.
תראה מה קורה.
 
שחק עם זה - ככה לומד מי שבאמת רוצה להיות מתכנת!
לצפיה ב-'אבל הפונקציה הזאת כתובה בתוך המחלקה...לא מחוצה לה.'
אבל הפונקציה הזאת כתובה בתוך המחלקה...לא מחוצה לה.
11/01/2018 | 14:24
1
3
לצפיה ב-'בגלל זה בדוגמה שלי כתבתי אותה בחוץ, כדי להראות לך שהיא לא'
בגלל זה בדוגמה שלי כתבתי אותה בחוץ, כדי להראות לך שהיא לא
11/01/2018 | 14:59
10
שייכת למחלקה.
 
לפי סינטקס של ++C, שיכול להיות מבלבל לפעמים, ניתן לכתוב את כל גוף הפונקציה בתוך גוף המחלקה, והמילה השמורה friend תהיה הדבר היחיד שהלכה למעשה יוציא אותה החוצה.
 
שים לב שלא כתבתי Point::equalPoints כשכתבתי את קוד הפונקציה.
 
הסיבה שהשורה עם friend עדיין נמצא בתוך המחלקה, היא שכדי שהפונקציה תהיה "חברה" של מחלקה, המחלקה צריכה להכריז עליה ככזו.
 
אם כל פונקציה יכלה להחליט שהיא חברה של מחלקה כלשהי בלי שינוי במחלקה עצמה, private היה חסר משמעות, ויכולת "לפרוץ" לתוך כל מחלקה, (אפילו אם אין לך את הקוד המלא שלה).
 
תחשוב על זה כך:
בחיים האמתיים, אתה מחליט שיוסי הוא חבר שלך, ולא יוסי מחליט שאתה רואה בו חבר על דעת עצמו.
לצפיה ב-'לא נראה לי שחשוב'
לא נראה לי שחשוב
10/01/2018 | 00:21
26
קצת נראה מיותר לעשות את זה בצורה של פונקציה מחוץ למחלקה. בעיקרון אתה מעדיף שפונקציות מבחוץ לא יגעו לך בשדות הפרטיים של המחלקה. זה עקרון חשוב ש friend שובר
לפעמים אין ברירה כמו בהעמסת אופרטורים מסויימים כמו 
  operator<<(ostream&, my_type const &)
שאם תשים במחלקה הוא מקבל כפרמטר ראשון this. ואתה לא רוצה את זה
לצפיה ב-'שאלות לגבי מחלקות:'
שאלות לגבי מחלקות:
07/01/2018 | 06:12
4
72
1) לגבי פונקציה חברה- האם פונקציה כזאת יכולה לבצע כל פעולה על תכונות המוגדרות כ-private  של המחלקה בו היא חברה,כולל למשל לשנות את אתחול התכונות הללו לאחר שאותחלו כבר ע"י הבנאי?
2) לגבי שיטות סטטיות ותכונות סטטיות - מה שונה אופי השימוש בהן לעומת כאלה שאינן סטטיות?
3) לגבי מחלקה שמוכלת בתוך מחלקה אחרת - נניח שהמחלקה המוכלת כוללת משתנה יחיד int x, והגדרתי בתוכה בנאי שמאתחל אותה. מדוע את אותו אתחול עליי להגדיר גם בתוך המחלקה המכילה? מדוע לא ניתן להסתפק באתחול שנעשה כבר במחלקה המוכלת?
4) לגבי תכונה שמוקצית דינאמית במחלקה - מדוע ביישום של אופרטור השמה חייבים לשחרר תכונה כזאת?
5) האם default constructor  יכול גם להיות ריק?
6) נניח שיש לי מחלקה B שיורשת את מחלקה A, ונניח שאני רוצה ליישם אופרטור השמה במחלקה B. האם במקרה זה דרוש ליישם אופרטור השמה גם במחלקה A?
 
תודה :)
לצפיה ב-'ממש שאלות של מבחן יש לך פה...'
ממש שאלות של מבחן יש לך פה...
07/01/2018 | 14:12
3
39
טוב, נו, הפורום חלש בזמן האחרון, אז לא אשלח אותך לקרוא עוד חומר
 
1) כן.
אין דבר כזה "שינוי אתחול", כל הצבה באיבר "תכונה" מחלקה היא פשוט הצבה, כמו במשתנה רגיל.
 
2) שהן אינן שייכות לאובייקט מסוים אלא למחלקה.
"תכונה"  (איבר סטטי) קיימת פעם אחת במחלקה, ויכולה להחזיק ערך אחד.
לא משנה כמה אובייקטים מהמחלקה תיצור, הם כולם יראו את אותו הערך.
 
פונקציה (מתודה) סטטית היא מתודה שניתן לקרוא לה ללא אובייקט, ישירות על המחלקה.
מסיבה זו היא לא יכולה לגעת בתכונות (משתנים) שאינם סטטיים או להפעיל מתודות אחרות שאינן סטטיות.
למעט כמובן בנאי - ניתן לבנות מופע של מחלקה בתוך מתודה סטטית שלה, משתמשים בזה למשהו שנקרא "singleton".
 
אם תרצה, ארחיב בנושא.
 
3) השאלה לא ברורה. תן דוגמת קוד.
 
4) מי אמר שחייבים לשחרר?
אופרטור השמה מחליף את התוכן של האובייקט.
כיצד הוא מתמודד עם תוכן מוקצה דינמית, תלוי בצרכים שלך.
 
למשל, אם כבר מוקצה זיכרון מספיק לתכונה, אתה יכול רק להחליף את התוכן.
מצד שני, אם התכונה היא מערך, ואתה צריך אחד גדול יותר, תשחרר את הישן ותקצה חדש בגודל הדרוש.
 
ייתכן אפילו, שתרצה להעביר רק את המצביע, ואז עליך לשחרר את המצביע הקודם שאתה עומד לאבד.
 
5) כן. למעשה, אם לא תגדיר במפורש בנאי, הקומפיילר יצור אחד ריק עבורך.
 
6) לא.
לצפיה ב-'דוגמא של קוד לשאלה 3 (שלא הבנת):'
דוגמא של קוד לשאלה 3 (שלא הבנת):
09/01/2018 | 23:42
2
13
 class A
{
int x;
public:
A(int x = 0) { cout << "In A::A x=" << x << endl; }
void foo() const { cout << "In A::foo\n"; }
};

class B : public A
{
public:
B() { cout << "In B::B(ver 1)\n"; }
B(int x) : A(x) { cout << "In B::B(ver 2)\n"; }

void foo()
{
A::foo();
cout << "In B::foo\n";
}
};
מחלקה B יורשת את מחלקה A.
השאלה היא למה גם מחלקה B צריכה להכיל בתוכה אתחול של A
ׁ(השורה 
 B(int x) : A(x)
)
 
?
לצפיה ב-'אחרת איזה ארגומנט יהיה לך בבנאי?'
אחרת איזה ארגומנט יהיה לך בבנאי?
10/01/2018 | 00:07
10
תמיד יש אתחול של מחלקת ההורה, בין אם כתבת ובין אם לא, רק כשיש לך בנאי ברירת מחדל הקומפיילר מוסיף לך אותו "מאחורי הקלעים"
לצפיה ב-'שים לב שמה שכתבת אינו "מחלקה מוכלת"'
שים לב שמה שכתבת אינו "מחלקה מוכלת"
10/01/2018 | 00:13
11
מחלקת אב אינה מחלקה מוכלת, ואין לבלבל בין השניים.
 
computer helper כבר נתן לך את התשובה.
 
ספציפית בדוגמת קוד שהבאת, במחלקה היורשת B אין שום איבר שנקרא x ולכן גם אין שום אתחול שלו.
x הוא איבר פרטי של A, ולכן ל-B אין גישה אליו, למרות ש-B יורשת מ-A.
 
לצפיה ב-'שתפו את ההערה הכי הזויה שלכם!'
שתפו את ההערה הכי הזויה שלכם!
07/01/2018 | 16:12
1
41
בזמן האחרון יש מעט מאוד תנוע בפורום.
 
חשבתי קצת איך לעורר פה עניין, ונזכרתי שיש לא מעט משתמשים וותיקים כמוני שקוראים פה, אבל כמעת אף פעם לא שואלים שאלות ולא פותחים שרשורים.
 
ואז בא לי רעיון:
נפתח שרשור ונשתף פה את ה-comments הכי הזויים, מצחיקים, לא יעילים, ואולי אפילו מזיקים שיצא לנו לכתוב בעצמנו.
 
מסוג הדברים שאתה מסתכל עליהם בדיעבד בקוד וחושב: WTF was I thinking???
 
וכמובן, כדי להראות שאני רציני ולא סתם זורק דברים באוויר, אתחיל לא מאחת, אלא משתי דוגמאות אישיות שלי שהיו כ"כ דפוקות, שאני זוכר אותן עד היום!
 
1. "נכון שאני חכם?"
פעם, הייתי צריך לשנות פונקציה בשפת C שחיה בספריה מערכתית כלשהי.
בגלל שמדובר בפונקציה מערכתית, היכולת לשנות היית מאוד מוגבלת, והיו אילוצים שונים ומשונים.
 
חלק מהשינוי היה להקצות 2 buffers בצורה דינמית בכל כניסה לפונקציה ולשחרר לפני יציאה ממנה.
 
ידעתי שהקצאות קטנות מרובות כאלה לא ממש עושים טוב למערכת, אבל הדרך היחידה שמצאתי לצמצם את כמות ההקצאות היית לאחד את הבאפרים להקצאה אחת.
 
זה הפך את הקוד ללא אינטואיטיבי (בעיני), ולכן הרגשתי צורך להוסיף הערה שמסבירה מה עשיתי:
 //aren't I clever?
 
 
2. "יותר הערות פחות קוד!"
לפני הרבה שנים במגמת מחשבים בתיכון קיבלנו תרגיל שבו היה צריך לבצע מספר פעולות עם רשימה מקושרת.
 
המורה ביקשה שנממש את התרגיל עם כמה שפחות משתנים, כדי שנלמד על יעילות זיכרון.
 
אחרי ששברתי את הראש קצת, הגעתי למסקנה שאם אני משרשר את הרשימה בסדר הפוך, אני חוסך משתנה אחד.
 
אבל השיטה הזו נראתה לי כ"כ מסובכת, שכתבתי הערה מפורטת שמסבירה מה עשיתי.
 
הבעיה?
ההערה לקחה מסך שלם (עורך Turbo Pascal ב-DOS)!
 
מיותר לציין שהמורה לא התלהבה מזה
 
יש לכם סיפורים דומים?
או לפחות נתקלת בחיים האמתיים בקוד עם הערות שכאלה?
 
שתפו!
לצפיה ב-'פעם יצא לי לכתוב קוד באסמבלר שיועבר לצוות דרייבר'
פעם יצא לי לכתוב קוד באסמבלר שיועבר לצוות דרייבר
08/01/2018 | 19:29
39
הלכתי לאנשי הדרייברים וחילצתי מהם הנחות יסוד,
אחת מהן הייתה שפקטה לא תהיה קצרה מDWORD.
 
לאחר שהבנתי שההבדל בביצועים יהיה משמעותי (ועניין הביצועים היה קריטי, אחרת לא היינו משכתבים לאסמבלי) - כתבתי את הקוד תוך הנחה שהיא אכן קצרה - והכנסתי הערת אזהרה מאיימת במיוחד בנוגע להנחות היסוד לקוד,
ובה - גם את קטעי הקוד שצריך להוסיף במצב בו הנחות היסוד היו שגויות - והעברתי לצוות דרייברים.
 
שנה לאחר מכן הופיע באג, בו בפרוטוקול מסויים היו הרבה שגיאות, ולאחר שלא הצליחו לפתור אותו, ביקשו ממני למצוא מהו.
מסתבר - שהתקשו לזהות את הבאג,
כי הסירו את האזהרה המאיימת, עם הקוד הנדרש לתיקון,
כנראה בגלל שהנוסח היה מלחיץ מדי.
לצפיה ב-'האם זה נכון'
האם זה נכון
05/01/2018 | 20:37
3
60
שבצבא משתמשים רק בשפת C ?
לצפיה ב-'לא'
לא
06/01/2018 | 15:12
1
41
יש גם נדב"ר
לצפיה ב-'נו באמת'
נו באמת
07/01/2018 | 12:38
37
נדב"ר זו לא שפת תכנות.
אפשר אולי תשובה יותר נורמלית ?
ראבק, מה נסגר עם אנשים בימינו ?
לצפיה ב-'זה מעולם לא היה נכון'
זה מעולם לא היה נכון
07/01/2018 | 10:44
17
לצפיה ב-'שאלות באלגוריתמים- אשמח לקבל הכוונה/סיוע.'
שאלות באלגוריתמים- אשמח לקבל הכוונה/סיוע.
29/12/2017 | 18:20
71
לצפיה ב-' פורומים חדשים מחכים לכם '
פורומים חדשים מחכים לכם
24/12/2017 | 13:06
4
 
פורום חדש יעסוק בדיני המס כולל תחום המיסוי הפלילי, בו תקבלו ייעוץ מעו"ד מומחה, לשעבר מנהל תחום במחלקת החקירות של רשות המיסים 
היכנסו עכשיו לפורום דיני מע"מ ומס הכנסה 
 
פורום חדש מרכז ייעוץ משפטי ומענה על שאלות בנושאים של ויזה, דרכון זר, הגירה, אזרחות ואשרת עבודה בחו"ל, בבריטניה וארה"ב בעיקר
היכנסו עכשיו לפורום ויזה ואזרחות בבריטניה וארה"ב
לצפיה ב-'שאלה: כיצד מתקשרת מחלקה אבסטרקטית לפולימורפיזם?'
שאלה: כיצד מתקשרת מחלקה אבסטרקטית לפולימורפיזם?
20/12/2017 | 13:13
11
48
ועוד לגבי מחלקה אבסטרקטית: ראיתי דוגמה למחלקה כזאת שמכילה שיטות ובכל זאת הופכים אותה לאבסטרקטית ע"י כך שהיא לא מכילה קונסטרקטור. למיטב הבנתי, השיטות במחלקה הנ"ל נועדו למחלקות שיורשות אותה. האם המחלקות היורשות יכולות להשתמש בכל השיטות של המחלקה האבסטרקטית ללא מגבלה?
לצפיה ב-'היא משתמשת בשח-רחוק אלחוטי נייד.'
היא משתמשת בשח-רחוק אלחוטי נייד.
20/12/2017 | 14:13
10
41
או בשפת העמחה - פלאפון
 
וברצינות - אתה מתחיל לשאול שאלות יותר ויותר כלליות שאי אפשר לענות עליהן כמו שצריך בפורום, אלא צריך לפנות לחומר לימוד מסודר.
 
אני לא יודע באיזו שיטה אתה לומד, אבל אם אינך מבין מה היא מחלקה אובסטרקטית, הרי שאתה צריך לחזור על איזה פרק או שניים.
 
בקצרה - מחלקה אבסטרקטית נועדה להיות בסיס משותף למחלקות אחרות, אבל אין לה משמעות בשני עצמה.
אם בכל זאת יש מקומו בהם לא משנה איזו מהמחלקות היורשות מקבלים, אפשר להעביר להם אובייקטים דרך טיפוס של מחלקת אב וליצור קוד כללי יותר.
 
באשר לאפשרות גישה של מחלקה יורשת למתודות ואיברים של מחלקת אב, זה לא שונה עבור מחלקה אבסטרקטית מכל מחלקה אחרת:
זה תלוי עם איזו הרשאת גישה הוגדר פריט מסוים: public \ private \ protected.
לצפיה ב-'אז הנה שאלה פחות כללית: האם יתכן שמחלקה אבסטרקטית'
אז הנה שאלה פחות כללית: האם יתכן שמחלקה אבסטרקטית
20/12/2017 | 15:14
9
25
תכיל גם קונסטרקטור? אם כן, מתי? כנ"ל לגבי דסטרקטור וקופיקונסטרקטור.
לצפיה ב-'וממש חידשת לי שטלפון הוא שח-רחוק בעברית. טוב לדעת.'
וממש חידשת לי שטלפון הוא שח-רחוק בעברית. טוב לדעת.
20/12/2017 | 15:15
2
3
לצפיה ב-'וסורי, למרות שברורה לי המהות של מח' אבסטרקטית, אני לא '
וסורי, למרות שברורה לי המהות של מח' אבסטרקטית, אני לא
20/12/2017 | 15:32
1
24
מבין למה היא "נכנסת" תחת הנושא של פולימורפיזם...
לצפיה ב-'כנראה משום שהיא מאפשרת, כמו כל מחלקת בסיס אחרת'
כנראה משום שהיא מאפשרת, כמו כל מחלקת בסיס אחרת
20/12/2017 | 16:51
29
טיפול משותף במספר סוגים שונים של מחלקות יורשות.
 
וזו הרי הגדרה בסיסית של פולימורפיזם לפי וויקיפדיאה...
 
לתשובה יותר מדויקת צריך לשאול את מי שערך את חומרי הלימוד שלך והכניס את הנושא תחת פרק מסוים...
לצפיה ב-'כן, ייתכן.'
כן, ייתכן.
20/12/2017 | 16:49
5
25
מחלקה אבסטרקטית ב-++C היא כל מחלקה שיש לה לפחות מתודה אחת "ווירטואלית טהורה", כלומר מתודה שמוכרזת בצורה מיוחדת ללא מימוש.
 
כל עוד יש את החוסר הזה, המחלקה ווירטואלית ולא משנה כמה בנאים תגדיר לה.
(כנ"ל לגבי dtor וכו')
 
מתי נשתמש בזה?
בוא נניח שיש לך מחלקה אבסטרקטית של "חיית מחמד".
לכל חיית מחמד יש שם, אז הבנאי של המחלקה "חיית מחמד" חייב לקבל פרמטר "שם" ולשמור אותו.
 
זו פונקציונליות משותפת לכל המחלקות היורשות.
 
אבל, חיות שונות אוכלות אוכל שונה.
אז, תהיה פונקציה "לאכול" למחלקה הזו, שתהיה "ווירטואלית טהורה" כי אין לה מימוש משותף.
 
רק מחלקות יורשות, כמו "חתול", "דג", "אוגר" יממשו את הפונקציה הזו.
כמובן, היא כן קיימת במחלקת אב כדי לחייב מחלקות יורשות לממש אותה, אחרי הכל לא ייתכן שתיצור חיית מחמד שלא אוכלת...
(לא, pet rock לא נחשב לצורך הדוגמה שלנו )
לצפיה ב-'ועוד לגבי פולימורפיזם:'
ועוד לגבי פולימורפיזם:
20/12/2017 | 20:33
4
24
1) האם למעשה פולימורפיזם מבצע דריסה או העמסה של מטודה?
2) מתי צריך להשתמש ב-override והאם יש תחליף לתחביר כזה?
לצפיה ב-'תשובות:'
תשובות:
21/12/2017 | 00:59
3
24
1) לא. פולימורפיזם מגדיר ממשק אחיד.
2) איזה תחביר, ולמה אתה רוצה תחליף?
לצפיה ב-'אתה מתכוון למילה override?'
אתה מתכוון למילה override?
21/12/2017 | 09:22
2
27
הקוד ירוץ גם אם לא תשתמש בה (זו תוספת מאוחרת לשפה). משתמשים בה בשביל:
1. לגרום לקומפיילר לוודא שאכן המתודה שהוכרזה כ-override היא כזאת - במידה ואין מתודה וירטואלית כזאת במחלקת האב תקבל שגיאה בזמן קומפילציה וזה עוזר למנוע בעיות בזמן ריצה (אתה חושב שמתודה מסויימת נקראת כשלמעשה נקראת מתודה אחרת).
2. זה עוזר לקריאות של הקוד - ברור שמתודה כזו היא וירטואלית ומוגדרת גם במעלה עץ הירושה. 
לצפיה ב-'שורשר לא נכון'
שורשר לא נכון
21/12/2017 | 09:23
1
8
לצפיה ב-'לא נורה - גם אני למדתי משהו!'
לא נורה - גם אני למדתי משהו!
21/12/2017 | 15:52
25
לא ידעתי ש-++C הוסיפו סימון override בדומה ל-Java
לצפיה ב-'virtual וירושה'
virtual וירושה
19/12/2017 | 21:41
2
38
מתי יש לציין בהגדרה של מחלקה יורשת את המילה virtual ?
לצפיה ב-'בכל פעם שרוצים שמחלקות יורשות ידרסו את הפונקציה'
בכל פעם שרוצים שמחלקות יורשות ידרסו את הפונקציה
19/12/2017 | 22:51
26
ותקרא גרסה נכונה שלה בזמן ריצה.
 
שים לב שמה שחשוב הוא לציין virtual במחלקת האב, ולא הבן.
לצפיה ב-'מציינים פעם אחת בלבד.'
מציינים פעם אחת בלבד.
20/12/2017 | 07:21
24
במחלקות הנגזרות השיטה תהיה תמיד וירטואלית. נוטים לציין גם בהן למען הסדר, אבל זו לא חובה.

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

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

מקרא סימנים

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