כמה שאלות לגבי C++

DuckFromHell

New member
כמה שאלות לגבי C++

שלום אנשים אני מתכנת מתחיל, עשיתי 2 יחידות תכנות בפסקל, ועכשיו התחלתי ללמוד מספר C++, ויש לי כמה שאלות: -יש הבדלים בין C ו-C++ חוץ מהעניין של תכנות מונחה עצמים ומחלקות, וכמה פקודות שונות? יש משהו שאפשר לעשות ב-C ואי אפשר ב-C++, או שאפשר לעשות אותו יותר טוב ב-C, או של-C++ יש רק יתרונות על פני C? -הבנתי מהם פוינטרים ואיך מצהירים עליהם ומשתמשים בהם, אבל מה שלא הבנתי זה - מה אפשר לעשות עם פוינטרים שאי אפשר לעשות בלעדיהם? -ועוד שאלה סתם - VB ו-JAVA הן שפות תכנות מונחות עצמים?
 

ברנדל

New member
תשובות

א. יש עוד הרבה הבדלים בין c++ לבין c, ההבדלים מתמקדים בבדיקות חזקות יותר של קוד המתכנת לפני שהוא מאושר להרצה, סינטקס שונה, תכנות גנרי, שימוש בסיפריות מועילות שהן סטנדרט בשפה ומקילות על המשתמש מאוד. מלבד זאת: אל תזלזל מ"הענין של תכנות מונחה עצמים" זה נושא רחב היקף שמשנה מאוד את אופן כתיבת התוכנית, לוקח זמן רב עד שמגיעים לשליטה טובה בזה. ב. נדמה לי שב c ניתן לעשות resize של מערכים וב c++ לא. (ניתן גם להוציא ביתר קלות exe עם באגים ב c) ג. אפשר לעשות איתם המון, אני לא אכתוב הכל, אבל סתם לדוגמא ערכים ב c/c++ עוברים byval (כי מתבצעת העתקה), באמצעות פוינטרים ניתן לממש העתקה byref. ד. java שפה מונחית עצמים, vb באופן חלקי לחלוטין (כלומר לא), vb.net כן
 

vinney

Well-known member
resize למערכים?

יש את פקודת realloc, אבל היא הורשה גם ל++C, ובכל מקרה מדובר במערכים דינאמיים. אי אפשר לעשות realloc למשתנה מסוג מערך ([]).
 

ofir3dvb

New member
לא הבנתי מה אומר בדיוק תכנות מונחה

עצמים....? ולמה זה טוב?
 

vinney

Well-known member
זאת שיטת פתרון בעיות

יש את השיטה הפרוצדורלית המטפלת בתהליך (FLOW) מסוים, ככה עובדים בC, BASIC, PASCAL, ושאר השפות מדור ראשון/שני/שלישי. שפות מדור שלישי והלאה תומכות גם בתכנות מונחה עצמים. פה המרכז הוא לא התהליך (FLOW) אלא העצם (OBJECT), ואתה מפתח את התוכנה סביבו. זה מתחיל מניתוח מונחה עצמים (OOD) שמנתח את הבעיה בהתאם, וממשיך לתכנות (OOP). לכל עצם פיזי נוצרת מחלקה לוגית שמאגדת את כל התכונות והפעולות הקשורות לעצם, והתוכנית שלך זה בעצם רצף אינטרקציות בין המחלקות בדיוק כמו שהתהליך זה רצף אינטרקציות בין עצמים. תכנות כזה קל יותר להבנה (כי יש הקבלה בין התוכנית לעולם האמיתי) ויותר חשוב, קל יותר לתחזוקה ופיתוח עתידי.
 

vinney

Well-known member
להיפך. JAVA זה כמו זה.

JAVA היא אחת מהשפות הרבות הממשות את עקרון הOOP. דוגמאות נוספות זה ++C, גם #C של MS.NET, שפת ADA, והרבה הרבה שפות אחרות.
 

DadleFish

New member
תשובות.

1. ההבדלים בין C לבין ++C הם בראש ובראשונה הבדלי גישה. C היא שפה פרוצדורלית מיושנת, ו-++C קופצת קדימה והופכת את C לשפה מונחית עצמים. 2. יש דברים שאפשר לעשות ב-C ולא ב-++C, אבל לא מדובר בדברים חיוביים אלא בדברים שבוטלו מהשפה עם המעבר ל-++C. לדוגמה, enum הוא שיטה לייצוג רשימות של ערכים - זה שימושי לכל מיני דברים כמו למשל לייצוג ימים, בתור SUNDAY, MONDAY וכו' - זה כמו קבועים, רק קצת יותר מתוחכם. ב-C, אם פונקציה מקבלת enum בתור פרמטר, אתה יכול להעביר לה סתם מספר במקום, או אפילו enum אחר. כמו כן, אתה יכול לעשות פעולות חשבוניות על enum-ים, כמו לסכום אותם ביחד. אלו פעולות לא הגיוניות בעליל, ולכן אי אפשר לעשות אותן ב-++C - וזו רק דוגמה אחת. 3. פוינטרים מאפשרים לך המון דברים. למשל, הקצאת מערך דינאמי בזכרון (שגודלו אינו ידוע מראש). יש מספיק דברים שאי אפשר לעשות בלעדיהם. 4. VB אינה שפת תכנות, אלא מחולל יישומים - ולכן בוודאי שאינה שפת תכנות מונחית עצמים. 5. JAVA היא שפה מונחית עצמים, אפילו יותר באדיקות מ-++C.
 
למעלה