עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

operators overloading ב ++c: string1 = string2 + string3 מישהו יכול לעזור לי

Featured Replies

פורסם

הי !

אני מנסה לבצע: string1 = string2 + string3 באופן הבא:

1. header file למחלקה str כדלקמן:


//str1.h

// header file for class str


class str
{
   public:
      str(char *);
      void setS(char *);
      str &operator+(str &);
      str &operator=(str &);
   private:
      char *s;
      int l;
};

2. ה implementation file של המחלקה כדלקמן:


//str.cpp

// implementation of class str

#include "str.h"
#include <new>
#include <iostream>

str::str(char *myS)
{
   setS(myS);
}

void str::setS(char *yoS)
{
   int myL = strlen(yoS);
   s = new char[myL];
   strcpy(s, yoS);
}

str &str::operator+(str &yoStr)
{
   int myL = strlen(yoStr.s) + strlen((*this).s);
   char *tempC = new char[myL];
   strcpy(tempC, (*this).s);
   strcpy(tempC + strlen((*this).s), yoStr.s);

   str myS3(tempC);
//line 27 - error
   return myS3;
}

str &str::operator=(str &yoStr)
{
   strcpy((*this).s, yoStr.s);
   return (*this);
}

והקובץ השלישי, ה driver:


//temp.cpp

// driver file for class str

#include "str.h"

int main()
{
   str myS1("Happy");
   str myS2("Birthday");

   str myS3("");
   myS3 = myS1 + myS2;
   return 0;
}

אח"כ מהדר :

bcc32 temp.cpp str.cpp

ומקבל הודעת שגיאה כדלקמן:

str.cpp 27: attempting  to return a reference  to local variable  'myS3'  in function str::operator+(str &)m

אודה למי שיעזור לי ויחלצני מן המיצר.(מה הטעות ? כיצד עושים זאת נכו ?)

תודה Q

פורסם

1. אתה לא יכול ליצור משתנה על ה- stack ולהחזיר reference שלו (הזיכרון יתפנה כשהפונקציה תחזור - לאן בדיוק יפנה ה- reference?)

2. יש שתי דרכים להגדיר את operator+:

str operator+(const &str)

ז"א לחבר את האובייקט הנוכחי לפרמטר ולהחזיר אובייקט חדש

friend str operator+(const &str1, const &str2)

ז"א לקחת שני str ולהחזיר אובייקט חדש.

פורסם
  • מחבר

הבנתי את שורש הרע במה שכתבתי  ::).

אני מודה לך !  :xyxthumbs:

פורסם

האופרטור = שלך לא טוב. אתה עושה שם STRCPY, כשבעצם אתה צריך לעשות STRDUP, ולמחוק את ההקצאה שלך בהתאם.

דוגמא:

בהתחלה str="hihi"

ועכשיו אתה עושה str = "hihi" + "hihi", כלומר str = "hihihihi".

אתה מעתיק ל- str את hihihihi, אך בstr יש רק 5 יCHARים, לעומת hihihihihi שיש שם 9 CHARים.

אני מניח שL משמש לשמור את אורך המחרוזת. איפה שמרת את זה. במקום ליצור ב- set משתנה שיכול את אורך המחרוזת, אתה יכול להשתמש ב- L(כל עוד התכוונת באמת שהוא ישמש לשמירת אורך המחרוזת).

ושוב, משהו חשוב מאוד הוא שכדאי לך לעשות DELETE ב- SET אם כבר יש שם מחרוזת.

הצעה להוספה



void clear()
{
if(s!=NULL)
delete [] s;
}
str(char *ss)
{
s = NULL;
setS(ss)
}
int setS(char *ss)
{
clear();
s = strdup(ss);
l = strlen(ss);
return l;
}
str &str::operator=(str &ss)
{
setS(ss.s)
}

זה לא הכי יעיל, אבל הכי הגיוני לעשות(שזה הרעיון בעצם של OO - שיהייה כמה שיותר דומה למציאות).

פורסם
  • מחבר

אני מאוד מודה לך.

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

אעיין במה שהצעת ואנסה זאת.

ושוב תודה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.