הקטע הבא חוזר הרבה פעמים:
data = new char; //memory allocation
assert(data != 0);//success check
data = '\0';לא חשוב שאני לא רואה ערך ב ASSERT אבל אתה יכול לעשות מזה פונקציה פרטית
נניח:
InternalCreate
אתה מקבל קלט בתור המימוש של מחלקה שאמורה להיות בלתי תלויה ב רכיב קלט
ה בנאי יחכה לקלט?!
String::MString(int length)
{
this->length = length;
cout << "Please enter the length of the string" << endl;
cin >> length;
this->data = new char;//memory allocation
assert(data != 0);//success check
data = '\0';
for (int i = 0; i < length; i++)
data = 'U';//values input
}
אתה כותב תוצאות פעולה בתור המחלקה...יש לי יסוד סביר להניח שאם זה היה נכשל גם הכתיבה לפלט הייתה נכשלת..
cout << "Strings has successfully been coppied" << endl << endl;
עדיף לך לעשות את זה מחוץ למחלקה פשוט אחרי העתקה תשמש באופרטור השוואה שעשית לוודא שהמחרוזות זהות(האמת שזה יותר מתאים ל UNIT TEST אבל אני מניח שביקשו ממכם להדפיס תוצאות)
יש לך שורה כזאת:
this->length = b.length; // setting similar size
יש לי יסוד סביר להניח שזה יגרום לך בעיות בזכרון לא בדקתי יכול להיות שאני טועה
את הפונקציה הבאה אפשר לכתוב יותר יפה בעזרת אופרטור מצביע
int MString::Strlen(){
int i = 0;
while (data != '\0')
i++;
return i;
}
יש עוד אבל נגמר לי החשק.בהצלחה.