תוימניד תואצקה - C++
ישאר דומע סינוקא ןד תאמ

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

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


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

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

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

: sizeof-ב שומישל אמגוד
int a=sizeof(int);

.int סופיטה לש (םיתבב) לדוגה אוהש 2 ךרעה תא ליכי a הנתשמה ,הז הרקמב
.(הנוש םיתב רפסמ - תורחא הלעפה תוכרעמב .םיתב 2 אוה int סופיט לש ולדוג ,DOS הלעפה תכרעמב)

malloc היצקנופה תועצמאב ןורכיז תאצקה
:איה היצקנופה לש תיללכה תינבתה
עיבצמ = (עיבצמ גוס) malloc (םיתבב ןורכיזה לדוג);

:אמגוד
:םירביא 10 לעב int סופיטמ שדח ךרעמ תוצקהל וננוצרבש חיננ
int *arr;
arr=(int *) malloc (10*sizeof(int));

.(int *) יוצרה סופיטל (casting) רימהל םיבייח ונחנא ןכלו void סופיטמ עיבצמ הריזחמ malloc היצקנופה
ןורכיזב םיפיצר םירביא 10 ןורכיזב ונאצקה ,ןכמ רחאל .arr ול ונארקו int סופיטמ עיבצמ ונרדגה ןאכ
.ךרעמל תוסחייתה איה arr -ל תוסחייתהה ,וישכעמ .arr עיבצמב תלכומ םהלש הלחתהה תבותכ רשא

:םירביא n לעב ךרעמל םיכרע תטילקו (n) רפסמ תטילקל אמגוד תינכות
void main()
  {
     int n,i,*arr;
     scanf( "%d" ,&n);
     arr = (int *) malloc(n*sizeof(int));
     if (arr==NULL)
     {
       printf("Allocation error\n");
       exit(1);
     }
     for (i=0; i<n ; i++)
        scanf("%d",&arr[i]);
     free (arr); 
 }

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

:האצקה תוניקת תקידבל אמגוד
int *arr;
arr = (int *) malloc (10*sizeof(int));
if (arr==NULL)
{
  printf("Allocation error\n");
  exit (1);
}

תינכותהמ ונאציו האיגש תעדוה ונתנ ,ןכ םא .NULL-ל הווש arr עיבצמה םא ונקדב ,האצקהה ןויסנ רחאל
.( exit(1) ) האיגש םע

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

:ךכ השענ רורחשה
free (הצקומ קולב תליחתל עיבצמ םש);

:רורחשל אמגוד
int *arr;
arr=(int *) malloc (10*sizeof(int));
.
.
.
free(arr);

.תוידיתע תואצקהל ןורכיז דוע רוגאל ידכ שומישה רמג םע דימ הצקומ ןורכיז ררחשל ץלמומ

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

עיבצמ = (עיבצמ גוס) realloc (עיבצמ ,שדח םיתב רפסמ);


:ל"נה אמגודה רובע תינכותה תא ןתינ
void main()
{
  int grades[]={37,68,90,54,77,82,74,45,40,100},i;
  int *fail=NULL,num_failed=0;
  for (i=0; i<10; i++)
    if (grades[i]<55)
    {
      fail=(int *) realloc(fail, ++num_failed);  // שדחמ האצקה
      if (fail==NULL)
      {
        printf("Allocation error\n");
        exit(1);
      }  
      fail[num_failed-1]=grades[i];
    }

  for (i=0; i<num_failed; i++)
    printf("%d ",fail[i]);

  if (fail)
    free(fail); 
}

אלש הנתשמל שדחמ תוצקהל ונל רוסאש םושמ תאז .NULL ךרע fail עיבצמל ונתנ תינכותה תליחתב
.הנושאר האצקה וזש עדוי רדהמה ךכ .NULL-ל הווש אוה ןכ םא אלא malloc םע תמדוק תימניד האצקה לביק
.grades םינויצה ךרעמב םיאצמנ רשא םילשכנה רפסמ תא הנומ num_failed הנתשמה

:םיאבה םירבדה תא עצבמ ,55-מ ןטקה ןויצ לכ .םינויצה ךרעמ לכ תא םיקרוס ונא
.[(++num_failed) האצקהה ינפל 1-ב םילשכנה הנומ תא הלעמ] ףסונ רביא fail עיבצמל הצקמ רדהמה
.םיצקומה םירביאב ויהש םיכרעה תקתעה םע ןורכיזב רחא םוקמל האצקהה תקתעה י"ע תאז השוע אוה
.תמדוקה האצקהה ירביא תא קוחמל יארחא םג רדהמה .ףסונ רביא הליכמ השדחה האצקהה
.החילצה האצקהה םא קודבנ ,האצקהה ןויסנ ירחאש ןבומכ
:(דבלב החנה ןה תובותכה) ךכ הארנ הז ןורכיזב - תיעיברה האצקהל אמגוד


:יחכונה לשכנה לש ךרעה תא םישנ הזה ףדועה רביאב .יתורירש ךרע ליכמ רשא ףדוע רביא ונשי ,עגרכ
fail[num_failed-1]=grades[i]

.םילשכנה ךרעמב םייוצמה םינויצה לכ תא סיפדנ ,םילשכנ ךרעמ תיינבו הקירסה םויס רחאל
.ןורכיזהמ ותוא הנפנ ,םילשכנה ךרעמ םע הדובעה םויס רחאל
קודבנ fail ךרעמ רורחש ינפל ,ןכל .תוימניד תואצקה ויה אל ןכלו םילשכנ ללכ ויה אלש בצמ ןכתיי
.NULL ךרע ליכמ אל אוה םא

Delete-ו New תודוקפה
תוקלחמ םע םיקסוע ונא C++-בש םושמ תאז .תושדח רורחשו האצקה לש תודוקפ יתשב ךרוצ היה C++-ב
ולש הנובה היצקנופה תא ורובע ליעפהל הצרנ ,ימניד ןפואב שדח טקייבוא םיצקמ ונא רשאכ .םיטקייבואו
.(Destructor) ולש תסרוהה היצקנופה תא ליעפהל הצרנ ,ןורכיזהמ ותוא הנפנשכ .(Constructor)
תוצירמ אל ךא טקייבואה תא תוצקמ קר ויה C תפש לש תויטרדנטסה ימנידה רורחשהו האצקהה תודוקפ
.(רורחש) delete-ו (האצקה) new תודוקפה יתש תא ואיצמה ,ןכל .תויצקנופה תא
ונא םא רשק אלל דימת ןתיא דובעל ףידענ ןכלו רתוי הטושפ איה הלא תודוקפ יתש םע הדובעה ,ןורקעכ
.ליגר סופיט וא טקייבוא םיצקמ

:ךכ תאז השענ .p עיבצמל char הנתשמ תוצקהל הצרנ :אמגודל
char *p;
p=new char;

איה םא קודבנ האצקהה רחאל ,ןבומכ .וילא ןווכמ p עיבצמה רשא ןורכיזב char הנתשמ התצקה וז הדוקפ
.(אל וא NULL וכרע םאה) p לש ךרעה תקידב י"ע החילצה

:ךכ תאז עצבנ ,char סופיטמ םירביא 10 לש ךרעמ תוצקהל הצרנ םא
char *p;
p=new char[10];

האצקהה םא) ידיימ ןפואב הנובה היצקנופה תא ורובע הצירמ new הדוקפה ,טקייבוא תימניד םיצקמ ונא רשאכ
.(ןבומכ החילצה

.delete הדוקפה י"ע טושפ ןפואב אוה םג השענ ,new י"ע הצקומה ןורכיזה רורחש
:ךכ תאז עצבנ ,וילא ןווכמ p עיבצמהו new י"ע הצקוהש דדוב רביא ררחשל םיצור ונא רשאכ
delete p;

:ךכ תאז עצבנ ,וילא ןווכמ p עיבצמהו הצקוהש םלש ךרעמ ררחשל הצרנ רשאכ
delete []p;

:בל םיש
.free י"ע ררחושת realloc-ו malloc י"ע העצובש תימניד האצקה
.delete י"ע ררחושת new י"ע העצובש תימניד האצקה
.תינכותה תסירקל ףאו תויופצ יתלב תואצותל איבהל לולע הזכ רבד .תויצקנופה ןיב ברעל ןיא