הגדרת מערך של מצביעים בC++ ואיתחולו. - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הגדרת מערך של מצביעים בC++ ואיתחולו.


yz101

Recommended Posts

אני עדיין בחיתולי לגבי C++.

עבור תרגיל בית שמתאר מלון ונופשים יצרתי CLASS חדש שנקרא HOTEL וCLASS שנקרא GUEST. הHOTEL כולל מערך של GUEST. מאחר ואני לא יודע את מספר הGUESTS המקסימלי, אני רוצה ליצור מערך התחלתי בגודל של 10, ואם אני מגיע למספר הזה, אז ליצור מערך חדש בגודל של 20 וחוזר חלילה. רציתי לעשות את זה בצורה של יצירת מערך של מצביעים לGUEST.

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

בCLASS המלון ההגדרה למיטב הבנתי היא כזו:

Guest** guests;

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

guests = מה?

בC זה היה כמובן השלב בו MALLOC, מה אמור לקרות במקום?

קישור לתוכן
שתף באתרים אחרים

מה זאת אומרת? במקום malloc שים new. יענו, משהו כזה:

guests = new Guest*[10];

שים לב שזה לא יוצר שום Guest! זה רק יוצר מערך של 10 מצביעים. כמו כל משתנה, בהתחלה התוכן של המערך לא מאותחל, מה שאומר שהמערך מכיל זבל. בדרך כלל כשיוצרים מצביעים אז מאתחלים אותם ל-NULL, כדי להבטיח שמי שמשתמש בהם יידע שהם לא מצביעים לשום דבר.

אגב, שני טיפים קטנים:

1. אל תוסיף כל פעם 10, אלא תכפיל את גודל המערך. זה יותר יעיל.

2. אלא אם אתה עושה את זה כדי להבין וללמוד מצביעים, אין שום סיבה שתממש דבר כזה בעצמך. ל-++C יש חבילה סטנדרטית שמכילה מחלקות שעושות את העבודה בשבילך - במקרה הזה לדוגמה אתה צריך את המחלקה vector.

קישור לתוכן
שתף באתרים אחרים

קודם כל תודה,

לא מצאתי את התחביר לזה.

לגבי הטיפים:

1. ברור שהגדלת המערך בקבוע היא לא יעילה - הגדרות התרגיל. זה יהיה הרבה יותר יעיל amortized בהכפלה.

2. שוב, בהגדרות התרגיל אסור היה להשתמש בשום מחלקה קיימת למעט STRING.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...