עבור לתוכן
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 rect {
int x,y;
public:
rect(int a,int b);
int area();
int perimeter();
void print();
void show();
};
rect :: rect(int a,int b)
{
if(a>0 && a<80)
x=a;
else
{
cout<<"error inputting number a\n";
exit(1);
}
if(b>0 && b<25)
y=b;
else
{
cout<<"eroor inputting number b\n";
exit(1);
}
}

void rect :: show()
{
int showingArea,showingPerim;
cout<<x<<'\n';
cout<<y<<'\n';
showingArea= area();
cout<<"The area of X and Y is "<<showingArea<<'\n';
showingPerim= perimeter();
cout<<"The perimeter of X and Y is "<<showingPerim<<'\n';
print();
}
int rect :: area()
{
int z;
z=x*y;
return(z);
}
int rect :: perimeter()
{
int z;
z=2*(x+y);
return(z);
}
void rect :: print()
{
int z,p;
for(z=0;z<x;z++)
{
for(p=0;p<y;p++)
cout<<"*";
cout<<'\n';
}
}

תוכנית MAIN:


int main()
{
int a,b;
cin>>a>>b;
rect rct1(a,b);
rct1.show();
cin.get();
}

התוכנית מקבלת שתי משתנים וניסגרת

אולי זאת קריסה לא יודע

אני יודע שהיא לא עובדת :P

פורסם

בוא נתחיל מזה שלא כותבים למשתמש מתוך rect, לא זורקים exception ולא יוצאים באמצע CTOR / DTOR.

תוריד את השורות האלה.

חוצמזה תעשה DEBUG שורה שורה ותראה על מה אתה עף.

פורסם
  • מחבר

בוא נתחיל מזה שלא כותבים למשתמש מתוך rect, לא זורקים exception ולא יוצאים באמצע CTOR / DTOR.

תוריד את השורות האלה.

חוצמזה תעשה DEBUG שורה שורה ותראה על מה אתה עף.

מה הכוונה

לא כותבים למשתמש מתוך RECT?

ואתה מדבר על השורות של הEXIT שמחזיר ערך של 1?

(כשהתכוונת לCTOR DCTOR כי אין לי מושג על מה אתה מדבר :P)

פורסם

אתה בטוח בכלל שאתה עף?

יכול להיות שהתכנית פשוט מסתיימת ויוצאת.

אגב, למיטב ידיעתי אין שום בעיה לזרוק חריגה מתוך בנאי.

פורסם
  • מחבר

אתה בטוח בכלל שאתה עף?

יכול להיות שהתכנית פשוט מסתיימת ויוצאת.

אגב, למיטב ידיעתי אין שום בעיה לזרוק חריגה מתוך בנאי.

היא פשוט מסתיימת ניראלי

אני מקליד מספרים שעומדת בתנאים של הIF

ופשוט יוצאת 0=

עריכה:

אם במקום A,B אני מציב מספרים היא עובדת כמו שצריך(מוריד את כל החלק של המשתנים ושם בסוגריים מספרים).

פורסם

אין צורך לצטט את ההודעה האחרונה כל פעם, אתה יכול פשוט ללחוץ על תגובה.

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

בכל מקרה, הבעיה שיש לך נובעת מה-buffering שיש ל-cin. אתה מוזמן לקרוא עוד ב-FAQ.

פורסם
  • מחבר

לא הבנתי מה אני אמור לעשות עם הדבר הזה

זה פשוט תקע לי את התוכנית והיא התחילה לקרוס

זה שאל אן להמשיך או לשבור(להפסיק)

(continue or break)

פורסם

למה אתה לא משתמש ב-endl במקום n\?

פורסם

אגב, למיטב ידיעתי אין שום בעיה לזרוק חריגה מתוך בנאי.

יש.

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

כנ"ל - אסור לזרוק מתוך DTOR, כי כשאתה זורק exception איפשהו בקוד, כל האובייקטים שהיו על ה STACK בסקופ המקומי נמחקים - קרי - נקראים ה DTORים שלהם.

אם זורקים exception בתוך מהלך זריקת exception- טוב זה לא ייגמר. סמוך עלי, או שאתה מוזמן לכתוב קוד של כמה שורות ולראות מה קורה.

אלה הרגלים רעים.

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

פורסם

לא הבנתי מה אני אמור לעשות עם הדבר הזה

זה פשוט תקע לי את התוכנית והיא התחילה לקרוס

זה שאל אן להמשיך או לשבור(להפסיק)

(continue or break)

האם אתה יודע להשתמש בDEBUGGER ?

פורסם
  • מחבר

אני חושב שכע

פורסם

אתה לא כל כך ברור.

ב DEBUG אין שגיאות ובריצה יש ?

פורסם
  • מחבר

אני צריך להשאיר את הקוד כמו שהוא עכשיו?

או לשנות דברים

יש לי MICROSOFT VISUAL C++ 2010 זה עושה אוטומטית DEBUG אחרת לא היה מפעיל ביכלל את התוכנית אם הייתה שגיאה

זה אומר לי אחרי שאני מכניס נתון:

Run-Time Check Failure #3 - The variable 'b' is being used without being initialized.

פורסם

יש.

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

כנ"ל - אסור לזרוק מתוך DTOR, כי כשאתה זורק exception איפשהו בקוד, כל האובייקטים שהיו על ה STACK בסקופ המקומי נמחקים - קרי - נקראים ה DTORים שלהם.

אם זורקים exception בתוך מהלך זריקת exception- טוב זה לא ייגמר. סמוך עלי, או שאתה מוזמן לכתוב קוד של כמה שורות ולראות מה קורה.

אלה הרגלים רעים.

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

אתה צודק לגבי dtor, אבל ממש לא לגבי ctor. בבירור האובייקט הוא לא יהיה בשימוש בשאר הקוד, אבל אין דבר כזה "שאר הקוד" - הרי עפה לך הרגע חריגה! כל הקוד שבא אחרי יצירת האובייקט, באותו ה-scope, לא יתבצע גם ככה. כיוון שהאובייקט רק קיים ב-scope הזה, גם ככה לא תהיה גישה אליו.

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

זה אומר לי אחרי שאני מכניס נתון:

Run-Time Check Failure #3 - The variable 'b' is being used without being initialized.

קראת את הודעת השגיאה וניסית להבין מה היא אומרת? היא אומרת לך בדיוק מה הבעיה.

פורסם
  • מחבר

לא משנה

הצלחתי לסדר

אבל עכשיו אני אמור ללחוץ הרבה פעמים אנטר כיד לצאת 0=

יש סידור לזה xD?

תודה רבה רבה לשניכם :)

עריכה :

לא משנה פתרתי גם את זה :)

תודה רבה

(חוץ מי זה שלא הבנתי על מה דיברתם על DTOR וכל השאר הבנתי הכל)

תודה רבה ^_^

ארכיון

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

דיונים חדשים

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.