שיחה:C++

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

העמסת משתנים[עריכה]

מה זה "העמסת משתנים"? גדי אלכסנדרוביץ' 09:01, 28 יוני 2005 (UTC)

פשוטו כמשמעו, אתה מעמיס משתנים על תוכנית אחת.

אני חושש שלא ענית לי. האם הכוונה היא לשימוש ב-namespace? לא הייתי קורא לזה "העמסת משתנים". גדי אלכסנדרוביץ' 05:43, 29 יוני 2005 (UTC)
מה זה בכלל namespace?
80.178.128.177 13:11, 13 באוגוסט 2006 (IDT)
אתה יכול להתחיל לקרוא מפה, ולהמשיך עם גוגל, התיעוד של הקומפיילר האהוב עליך, TC++PL, וכו'. ‏conio.h‏ • ‏שיחה‏ 14:26, 13 באוגוסט 2006 (IDT)

תקלה במאמר![עריכה]

במאמר זה נכתב כי על מנת למנוע למידה כפולה יש ללמוד C ולאחר מכן להתחיל בלמידה של C++. זה לא נכון. באתר של ביַירנֵה סטְרוֹסְטְרוּפּ (Bjarne Stroustrup) אבי שפת C++ יש מספר תשובות לשאלות נפוצות בעניין. מן הדברים שהוא פרסם באתר שלו (http://www.research.att.com/~bs/) עולה כי לא נחוץ כלל ללמוד C לפני שלומדים C++, וכי לא תמיד נתן לראות ב-C++ את הרחבה של C, כמו כן גם יש שוני בין השפות שיכול להגדיר אותם כשפות שונות שישנה מידה מסוימת של התאמה ביניהם. אמליץ בחום לכל מי שיש לו עיניין בC++ לעיין באתר שלו. בייחוד תשובות FAQ הבאות:
http://www.research.att.com/~bs/bs_faq.html#prerequisite
http://www.research.att.com/~bs/bs_faq.html#C-is-subset

הערה ל"תקלה במאמר": מה שנאמר בכלליות נכון אבל תלוי במבנה הספר, אני

הבנתי מהספר(רשימת הפרקים) שהוא בנוי ליודעי שפת c והאלמנטים המפויעים בו הם בעצם כל התוסופות שנוספו לשפת c, בהגדרת ++C.

הערה ל"הערה ל'תקלה במאמר'": משתנה האיגוד, למשל, קיים גם ב-C ולא רק ב-C++.
אבל סטרוסטרופ עצמו ממליץ ללמוד וללמד CPP כטבולה ראזה, מאפס, ודווקא לא לא על בסיס C. אפשר וראוי להתייחס להצעות שלו בספקנות, כמו להצעות של כל אדם אחר, אבל כדאי לפחות להתייחס אליהן. ניתן לו את הקרדיט שיש לו טיפה של מושג על מה הוא מדבר. ‏conio.h‏ • ‏שיחה‏ 14:26, 13 באוגוסט 2006 (IDT)
ראשית כל - מה הקשר? שנית - לכל אחד יש את הדעות שלו, ולדעתי גם התנגדות זו צורה של התייחסות--87.69.216.112 09:22, 19 בספטמבר 2006 (IDT)

אני לא יודע מתי סטרוסטרופ כתב את המלצתו אבל לדעתי המצב השתנה מאוד ב 10 השנים האחרונות. לפני כן ++C היתה השפה היחידה בתעשייה שהיתה מכוונת עצמים. מאז, למי שמתחיל מטאבולה ראסה הייתי ממליץ ללמוד Java או C#. זה לא שאבד הקלח על ++C, נהפוך הוא: אין לה תחליף בפיתוח מערכות תוכנה מורכבות ומהירות. אין שפה טובה ממנה לכתוב משחק תלת מימד, למשל או תוכנה גראפית הנדסית או מנוע לDataBase וכמובן מערכת הפעלה. וכאן אני מגיע לנקודה: הסיבה לכך שאין ל ++C תחליף היא שהיא גמישה ויעילה (בניגוד למשל ל-Java או C#). הגמישות והיעילות שלה מגיעים מ - C. נכון שגם בOO היא מספר 1 אבל, שוב, מקור העוצמה שלה בא דווקא מ-C (על כל חוחלשתיה), ומהקשר המיידי שלה למכונה. בשביל להפיק את המירב מ ++C צריך להבין לעומק את מבנה המחשב, מערכת ההפעלה (למשל: Stack, Heap) ואת זה לומדים מ C. ללמוד ++C על ההתחלה, כמו שפעם היו לןמדים Basic, זו לדעתי טעות חמורה. לצורך זה Java עדיפה בהרבה.

את זה לומדים כשלומדים שפת סף - אסמבלי. אתה יכול ללמוד C גם בלי להכנס לפרטים על מבנה המחשב. ybungalobill 14:51, 6 ביוני 2008 (IDT)

פקודות לקדם מהדר[עריכה]

למה הכונה לפרק על "פקודות לקדם מהדר"? אם הכוונה לפקודות שמתחילות ב-#, יש אותם גם ב-C
87.69.216.112 09:25, 19 בספטמבר 2006 (IDT)

ידע נדרש[עריכה]

כדי ללמוד C++ לא צריך לדעת לפני כן C, להיפך, אם המתכנת לא יודע C - עדיף להתחיל ישר מC++. הסיבה לכך היא הגישה לתכנות מונחה עצמים. כאשר המתכנת לומד סי, הוא מתרגל לתכנות לא מונחה עצמים. כשילמד C++, ידע מה זה מחלקות, קבועים, תבניות, מרחבי שם וחריגות, אך לא יהיה רגיל להשתמש בהן. כתוצאה הוא יכתוב בשפת C++ תוכניות "בסגנון C", כלומר ימשיך להשתמש ב#define במקום להשתמש בקבועים ובתבניות, במקום להשתמש במחלקות ותורשה, ישתמש במבנים ושדות type field. בנוסף יצטרך לבזבז זמן על ללמוד "טריקים" של C אשר לא יצטרך להשתמש בהם בC++ כלל.

(בהתבססות על ניסיון אישי וhttp://www.research.att.com/~bs/bs_faq.html#prerequisite)

הערה לידע נדרש:

זה נכון שכדי ללמוד c++ לא צריך ידע מוקדם בc, העניין הוא שכשמתחילים ללמוד c++ מההתחלה,לאורך כל הדרך לומדים גם c(כל C בשביל ידע מקצועי של c++), אז אפשר להגיד שזה לא משנה
אם ללמוד קודם c ואח"כ c++ לבין ללמוד רק c++.
ראוי לציין שלא משנה מה, c++ היא הרחבה של C, מעין שדרוג בשביל תמיכה במכוונות עצמים,
בשונה משפות מונחות עצמים(טהורות) חדשות כמו C# וjava שמתבססות אך ורק על 'התחביר' של C
ולדעתי זה לא יגיע למצב של התרגלות אם לא תהיה הפסקה משמעותית בין שני השפות. Yosi 16:55, 8 ביולי 2007 (IDT)

להלן רשימה חלקית של הבדלי שפה משמעותיים בין C ל-C++ שאחרי שבן-אדם למד אותם צריך להתרגל שוב לתיקונים שחלו בתקן C++ על מנת לשפר את השפה (C++ היא לא רק הרחבה):
  • טיפוסיות חלשה יותר, טווחי הכרה של שמות (משתנים/טיפוסים), טיפוס int כברירת מחדל אם לא צוין אחרת, קריאה לפונקציות תקניות ללא הצהרתן (ללא #include), סוגריים ריקים בכותרת הפונקציה הם סימן ל"פרמטרים כלשהם" ובמקביל גם שימוש בvoid (דבר מיותר ולא יפה בC++), הגדרת טיפוסי הפרמטרים לאחר כותרת הפונקציה, ניתן בC להמיר מספר שלם לenum, הגדרה חוזרת של אותו משתנה ללא extern, המרת מצביע void לכל מצביע אחר ללא ציון מפורש לביצוע דבר זה.
והנה רשימה חלקית של דברים שהם לא הבדלים בתחביר או בכללי השפה אלא באופן המחשבה ובאופן הכתיבה. להתרגל לדברים אלה ולהשתמש בהם בצורה נכונה אף קשה יותר מאשר ללמוד את ההבדלים שלמעלה:
  • בC++ יש תחליפים ל#define, הפחתת מספר המשתנים הגלובליים, הרגל לשימוש בnew וdelete, תכנות מונחה עצמים במקום אלפי הפונקציות שמקבלות מבנים כפרמטרים, התרגלות לשימוש בconst, התרגלות לcontainers במקום מערכים מובנים, שימוש בהעמסה במקום כתיבת פונקציות עם סיומות (print_int, print_long ...), פונקציות וירטואליות במקום קוד הבנוי בצורת switch ארוך, bool שמקבל אמת או שקר במקום BOOL או int שמקבלים 1 או 0, שימוש במרחבי שמות במקום תוספות תחיליות לפונקציות (glVertex, XCreateWindow, WSASend).
ללמוד C++ מאפס מהר יותר מאשר ללמוד C ואחר כך את כל הדברים החדשים בC++. אני מציע שספר זה יכתב בצורה שילמד את הכל מאפס. כדי שמישהו שכבר יודע C יוכל ללמוד C++ מהר יותר, אפשר לעשות איזשהו סימן (תמונה יפה "C++") שתופיעה בצד כל דבר המיוחד בC++ או בראשית כל פרק העוסק בנושא חדש, כמו מחלקות למשל. כך הקורא שיודע כבר C יוכל לדלג על כל מה שזהה בC וC++.
ybungalobill 10:07, 6 ביולי 2007 (IDT)
אני מסכים שיש לשנות את הספר למצב שיתחיל את הלימוד מההתחלה, בסגנון של הויקיספר האנגלי.
יעזור כנראה להוסיף את אותם פרקים חסרים שנמצאים בספר C, ולשנותם כפי הנדרש.
Yosi 16:55, 8 ביולי 2007 (IDT)

מושגים בעברית[עריכה]

היי, אינני יודע את התרגומים המדוייקים של כל מיני מושגים:

  • member function – פונקציית חבר?
  • friend function – ?
  • protected – מוגן?
  • Bitwise OR/XOR/AND/NOT – ?
  • Bitwise shift – ?
  • IO stream – אין תרגום?
  • Postfix/Prefix – ?

תודה לעוזרים. ybungalobill 12:51, 8 בפברואר 2008 (IST)