פורסם 2010 ביולי 1815 שנים שלום רב, cout<<"enter the length of "<<i+1<<" member"<<endl; cin>>membersize; stringg=new char[membersize+1]; cout<<"enter the string: "<<endl; cin>>stringg; arr[i]=new Groups(stringg,membersizeזו בקשת השאלה:יש לבנות קבוצת איברים שהם מילים .מחלקה "קבוצה" מכילה גודל הקבוצה (מספר איבריה) ומצביע לתחילתה.כתוב את המחלקה "קבוצה" עם הפונקציות הבאות :בנאי:- בנאי שמקבל קבוצה ע"' מערך קיים וגודל המערך ויוצר אובייקט-קבוצה בהתאם. אני מבקש מהמשתמש להכניס גודל של איברואז יוצר מערך בגודל זהומקבל מהמשתמש את המחרוזתואז יוצר מערך של אובייקטים.אני צריך לשלוח למחלקה את המחרוזת וגדולה.הבעיה שלי היא להעביר את כל האיברים האלו שמהווים קבוצה אחת(קבוצה שיש בה כמה מילים)למחרוזת המוגדרת כפרטית במחלה גרופ.אין לי בעיה עבור כל איבר arrלשלוח למחלקה את המחרוזת שלו,אך בהמשך המשיחה עלי ליצור פונקציה ב-ת-ו-ך המחלקה ובעזרתה להשוות בין איבר מסויים לשאר הקבוצה או בין איברי הקבוצה לאיבר חיצוניתודה רבה.
פורסם 2010 ביולי 1815 שנים הבנאי של המחלקה Group (לא Groups) צריך לקבל שני ארגומנטים: מערך של מחרוזות (תזכורת: כל מחרוזת בפני עצמה היא מערך, ולכן זה צריך להיות מערך של מערכים), ו-int המציין את מספר האיברים במערך (שים לב: זהו גודל המערך הראשי, ולא הגודל של כל אחד מתתי המערך שלו).לא כל כך ברור מה אמור לעשות הקוד שכתבת כאן, כי הוא לא ממש עושה את מה שהשאלה דורשת.תעלה את השאלה במלואה, ואת הקוד במלואו.
פורסם 2010 ביולי 1815 שנים אני לא ממש מבין מה אתה רוצה לעשות אבל אני יכול להעיר בהתאם למה שהבנתי:קודם כל, המתשתמש לא חייב לך שום דבר, חוץ מלהכניס כמה מחרוזות אחת אחרי השניה. כמה שבא לו. קלט מחרוזת מסתיים ברגע שהוא מקיש ENTER. סיום הקלט יתרחש כאשר הוא ילחץ ENTER פעמיים - כלומר יספק קלט של מחרוזת ריקה.את גודל המחרוזת תדע ע"י מדידה של אורך הקלט. וגודל של סה"כ מערך תדע בסיום הפעולה. אתה יכול להקצות מערך בגודל שרירותי לשם התחלה כל כולו מאותחל ל 0 . כך תדע תמיד איפה נמצא האיבר האחרון.לגבי העברת פרמטרים - אם אתה עובד בתכנות מונחה עצמים, אז גם המחרוזות, כלומר המילים הן אוביקטים. אז אתה צריך ליצור אוביקט שמהווה מחרוזת ומכיך את התוכן ואת גודל המחרוזת. ויש לו פונקציות לגישה למחרוזת. ככה שאין גלישת זכרון. במילים אחרות אתה חייב ליצר אוביקט של מילה עבור כל מחרוזת שנקלטה. האוביקט GROUP הוא מיכל של כמה אוביקטים של מילים.מקווה שזה עוזר לך
פורסם 2010 ביולי 1815 שנים ליצור אובייקט שמכיל מחרוזת זה overkill, במיוחד כשיש כבר אובייקט כזה - string. לפי מה שהבנתי פותח הת'רד צריך פשוט להשתמש ב-null terminated strings, כמו ב-C.פותח הת'רד, תקן אותי אם אני טועה, אבל לפי מה שהבנתי ממה שכתבת ומהת'רד הקודם שפתחת, נראה לי שאתה נוטה לעשות בקוד שלך דברים שפשוט לא נדרשו ע"י התרגיל.
פורסם 2010 ביולי 1815 שנים ליצור אובייקט שמכיל מחרוזת זה overkill, במיוחד כשיש כבר אובייקט כזה - string. לפי מה שהבנתי פותח הת'רד צריך פשוט להשתמש ב-null terminated strings, כמו ב-C.מה overkill עכשיו?אם אתה עובד בתכנון מונחה עצמים אז ככה צריך לעבוד. לדעתי זה ההבדל בין חשיבה מונחית עצמים לבין מישהו שמתכנת בתחביר של C++ אבל חושב C.אני גם חושב שקצת הגזמת - זה לא כל כך הרבה קוד. מחלקת STRING פשוטה שכותבים מאפס יכולה להיות מחלקה עם בסה"כ 2 פרמטרים ו5 פונקציות פשוטות. ואחרי שכותבים פעם אחת נכון, אז כל הכתיבה יותר מהירה כי לא צריך בכל מקום לבדוק מה קורה עם המחרוזת והאם יש גלישה והסיכוי לבאגים קטן יותר. זה גם מקל על כל הנושא של העברת משתנים.לגבי שימוש באוביקט STRING הסטנדרטי - ממה שאני מנחש שהם תנאי התרגיל, כנראה שאסור לו להשתמש בזה אם הוא בשלב כזה של לימוד.
פורסם 2010 ביולי 1815 שנים אני מניח שהמטרה של התרגיל היא גם לא להגדיר מחלקה של מחרוזת. אם היו רוצים שיעשה את זה, היו מבקשים.
פורסם 2010 ביולי 1915 שנים מחבר בסופו של דבר אמרו לנו שניתן להשתמש במחלקה "מחרוזת".ואז נוצרה לי בעיה חדשה.כאשר יצרתי פונקציה כזו:void Group::Comparstring(Group otherObj){...}ושלחתי לה מהראשי אובייקט מאותו סוגobj1.Comparstring(obj2);גפ אובג'1 וגם אובג'2 מוגדרים כאובייקט מסוגGroup הקומפיילר אומר לי1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Group::Group(class Group const &)" (??0Group@@QAE@ABV0@@Z) referenced in function _mainאבל אם אני מגדיר את זה כרפרנס, זה עובדvoid Group::Comparstring(const Group& otherObj){מדוע כך?תודה רבה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.