עבור לתוכן
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.

עזרה במערך אובייקטים דו מימדי בC++

Featured Replies

פורסם

יש לי מחלקה

class abc

{

public:

int x;

abc()

{

x=0;

}

};

אני רוצה ליצור ממנו מערך דינמי (יקבע בהמשך) לדוגמא:

class def

{

public:

//אני יודע שהשורה הבאה זו טעות, אז איך באמת עושים זאת?

abc aaa[][];

int size;

def(int size)

{

this->size=size;

//אני יודע שהשורה הבאה זו טעות, אז איך באמת עושים זאת?

aaa=new abc;

}

};

אם אני רוצה להדפיס אותו איך מבצעים זאת?

אני משער:

void print2D_array()

{

int i,j;

for(i=0; i<size; i++)

{

cout<<"\n";

for(j=0; j<size; j++)

cout<<aaa[j].x<<setw(4);

}

}

תודה לעוזרים :)

פורסם

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

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

abc sarray[10][10]

sarray הוא מערך דו מימדי שמוקצה באופן סטטי בגודל 10x10 ומוכן לשימוש.

במקרה ואורך המערך לא ידוע בזמן הקימפול (אלא בזמן הריצה) צריך להקצות אותו באופן דינמי בעזרת new ולבסוף לשחרר אותו בעזרת delete. את המערך אתה שומר בעזרת מצביע.

מערך דו מימדי שכזה דורש יותר עבודה (כדאי לך אולי לבדוק אלטרנטיבות אחרות כמו שימוש ב vector מה STL למשל). אתה צריך להגדיר מצביע למצביע, להקצות אותו (את המצביע ה"ראשי") ואז להקצות כל שורה בנפרד:

abc** darray = new abc*[rows];
for (int i=0; i<row; i++)
darray[i] = new abc[cols];

כש row הוא משתנה שמחזיק את מס' השורות ו cols את מספר העמודות.

זכרון שהוקצה בעזרת new חייב להשתחרר באופן ידני ע"י קריאה ל delete. לכן, לאחר שסיימת להשתמש בו אתה חייב לשחרר אותו בעזרת []delete: קודם כל כל שורה בנפרד ואז את darray עצמו:

for (int i=0; i<row; i++)
delete[] darray[i];
delete[] darray;

פורסם
  • מחבר

תודה

רשמתי את שורות הקוד בקונסטרקטור של המחלקה def , בשלב הלולאה FOR הקומפיילר רושם שגיאה:

"Functions containing for are not expanded inline"

פורסם

יעזור אם תצרף את הקוד המלא. באיזה קומפיילר אתה משתמש? אתה בטוח שזו שגיאה ולא אזהרה?

פורסם
  • מחבר

אכן זו אזהרה, אבל למה?

class abc

{

public:

int x;

abc()

{

x=0;

}

};

//_________________________________________________________________________

class def

{

public:

abc **aaa;

int size;

def(int size)

{

this->size=size;

aaa=new abc*;

for(int e=0; e<size; e++) //אזהרה

aaa[e]=new abc;

}

};

פורסם

עבור פונקציות שמוגדרות בתוך ההגדרה של המחלקה בקובץ h (מוגדרות "על המקום") הקומפיילר (כברירת מחדל) מנסה ליצור אותן כ inline: בכל מקום שבו יש קריאה לפונקציה מוכנס הקוד המלא של הפונקציה ולא קריאה לפונקציה. יכולים להיות לכך יתרונות מבחינת ביצועים. אתה מוזמן לקרוא יותר לעומק על inline functions כאן:

http://www.parashift.com/c++-faq-lite/inline-functions.html

במקרה הזה, הקומפיילר פשוט מודיע שעקב הלולאה (לולאת ה for) הפונקציה לא תהיה inline. לך זה לא באמת משנה.

באופן כללי, כדי לשמור על הקוד קריא, עדיף להפריד בין ההצהרה על המחלקה (והפונקציות שלה) לבין המימוש (הקוד עצמו). אפשר לממש את הפונקציות בקובץ cpp או במקרה הצורך בקובץ ה h אבל לא בתוך הגדרת המחלקה.

דבר נוסף: אל תשכח לשחרר את הזכרון שהקצאת. אתה יכול להוסיף destructor שיבצע את השחרור וכך תבטיח שתמיד הזכרון ישוחרר:

~def()
{
for (int i=0; i<row; i++)
delete[] darray[i];
delete[] darray;
}

פורסם
  • מחבר

תודה על ההסברים ;)

אני חושב שיש לי בעייה בקומפיילר , אפילו תוכנית לדוגמא לא עובדת.

אני רוצה להישתמש בפונקציות של graphics.h

[attachment deleted by admin]

פורסם
  • מחבר

וואלה איך שכחתי לקשר :kopfpatsch:

תודה

ארכיון

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

דיונים חדשים

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.