'''C++ (נהגה: 'סי פלוס פלוס')''' היא שפת תכנות מרובת פרדיגמות המבוססת על C. היא פותחה בשנות ה־80 ויצאה למסחר ב־1985. השפה מאפשרת תכנות פרוצדורלי (כתיבת פונקציות ופקודות סדרתיות), תכנות מונחה־עצמים (אוריינטד־אובייקט, יצירת מחלקות ועצמים) ותכנות גנרי (כתיבת קוד כללי שניתן להשתמש בו עם סוגים שונים, למשל באמצעות templates). שפות פופולריות אחרות הושפעו ממנה, כגון Java ו‑C#.
פיתוח השפה החל ב־1979 על ידי ביארנה סטרוסטרופ במעבדות בל. בתחילה נקראה C with classes (״C עם מחלקות״). סטרוסטרופ חיפש לשלב את תכונות האובייקט של Simula עם היעילות של C. ב־1983 נוספו אפשרויות כמו פונקציות וירטואליות (שיטות שנקראות באופן דינמי), העמסות פונקציות ואופרטורים, הפניות (references), וקבועים. השם C++ סומל על ההרחבה ל־C ועל אופרטור ++ שמוסיף 1 לערכים. הספר הראשון פורסם יחד עם ההפצה המסחרית הראשונה ב־1985.
לאורך השנים נוספו יכולות חדשות: תמיכה בתבניות (templates) בשנות ה־90, תקנים רשמיים החל מ־1998 (ISO). תקנים עיקריים שנוספו הם C++11, C++14, C++17, C++20 (פורסם רשמית ב־יולי 2019), C++23 (תקן עדכני כפי שמוזכר), וכן נסמכים על עידכונים עתידיים.
C++ משלבת כמה מודלים תכנותיים כדי לאפשר ביצועים וגמישות. היא מתאימה גם לתוכנה משובצת־מחשב (embedded) וגם למערכות גדולות. השפה שמה דגש על יעילות ובקרת משאבים, ומאפשרת גישה ישירה לזיכרון המחשב. למתכנת יש שליטה מלאה על מה שקורה בזמן ריצה, ולכן בדרך כלל אין איסוף זבל אוטומטי (garbage collection). ניהול משאבים נעשה בטכניקה שנקראת RAII, ניהול משאבים דרך אובייקטים (Resource Acquisition Is Initialization), למשל באמצעות מצביעים חכמים (smart pointers) ומכולות כגון וקטור.
מערכת הטיפוסים ב־C++ היא סטטית ומחמירה יותר משל C. זה מאפשר למצוא שגיאות בזמן הידור (הקומפילציה) וליצור קוד יעיל יותר.
מרבית המושגים הבסיסיים של C קיימים גם ב־C++. להלן תוספות חשובות.
מחלקה (class) מתארת טיפוס שמכיל נתונים ופונקציות שמפעילות אותם. משתנים מסוג מחלקה נקראים עצמים (objects). למחלקה יש שיטות (member functions), ובפרט בונים (constructors) להרכבה והורסים (destructors) לניקוי.
המחלקה תומכת ברמות גישה: public (ציבורי), protected (שמורה לסוגים היורשים) ו‑private (פרטי). יש גם מנגנון friend שמעניק גישה לפונקציה או למחלקה אחרת.
מחלקה יכולה לרשת מתכונות של מחלקה בסיסית (inheritance). ב־C++ אפשר ירושה מרובה, ירושה ממספר מחלקות בו‑זמנית. שיטות וירטואליות מאפשרות פולימורפיזם (polymorphism), קריאה לשיטה דרך מצביע או ייחוס למחלקה בסיסית שגורמת להפעיל את המימוש של המחלקה הנגזרת בפועל. RTTI (Run-Time Type Information) מספק מידע על טיפוס בזמן ריצה ומאפשר המרות בטוחות כמו dynamic_cast ו‑typeid.
המרות טיפוסים נעשות באופן מפורש יותר מאשר ב‑C. שימוש ב־void* מחייב המרה מפורשת, ולכל המרה יש אופרטור מתאים: static_cast, dynamic_cast, const_cast, reinterpret_cast. זה עוזר לתפוס שגיאות בזמן הידור.
ניתן להגדיר משתנים, פרמטרים או מתודות כ‑const כדי לאפשר למהדר למצוא טעויות ולשפר ביצועים. יש מקרים שבהם const לא מספיק, למשל כאשר האובייקט מחזיק מצביע שמשנה את התוכן שהוא מצביע אליו, או מטמון פנימי (cache). לשם כך קיימים qualifiers כמו mutable.
ייחוס (reference) הוא סוג של הפניה לאובייקט, דומה למצבע (pointer) אך תמיד מאופשר ומחייב להיות מאותחל. ייחוס לא משתנה אחרי יצירתו.
C++ כוללת מנגנון חריגות (exceptions) לטיפול בשגיאות בזמן ריצה באמצעות throw, try ו‑catch. throw משליך שגיאה; try מקיף קטע קוד שמושגח; catch תופס חריגה לפי טיפוס. ניתן גם לבצע rethrow (לזרוק שוב) על מנת להעביר את החריגה הלאה לאחר טיפול חלקי או רישום.
למבדה היא פונקציה אנונימית (פונקציה בלי שם). היא מאפשרת להעביר פונקציות כערכים וליצור מצביעים לפונקציות. במבנים מודרניים של שפה משתמשים בה רבות בקוד תמציתי.
C++ מאפשרת העמסת פונקציות, שימוש באותו השם למספר פונקציות שונות לפי חתימת הפרמטרים. בנוסף, אפשר להעמיס אופרטורים ולהגדיר משמעות חדשה לאופרטורים עבור טיפוסים שהמתכנת יוצר.
ניתן להגדיר ערכי ברירת מחדל לפרמטרים. כך ניתן לקרוא לפונקציה עם מספר שונה של ארגומנטים בלי לשכפל קוד.
Templates מאפשרות לכתוב מחלקות ופונקציות גנריות שיושמו לטיפוסים שונים בעת הידור. זו דרך לכתוב קוד כללי ויעיל ללא תלות בהיררכיית הירושה.
טכניקת TMP מנצלת templates לביצוע חישובים בזמן הידור. היא חזקה מאוד, ולעתים מסובכת לקריאה. התבניות התגלו כטיורינג‑מלאות, כלומר אפשר לחשב באמצעותן כל חישוב תיאורטי.
ה־STL מספקת מבני נתונים (כגון vector, מערך דינמי, רשימות, מחסנית) ואלגוריתמים גנריים שניתן להפעיל עליהם. הארכיטקטורה שלה מאפשרת להרחבה קלה.
הספרייה הסטנדרטית מציעה זרמים (streams) לקריאה ולכתיבה. משתמשים באופרטורים >> לקריאה ו‑<< לכתיבה דרך std::cin ו‑std::cout.
דוגמת תוכנית בסיסית מפעילה int main() ומשתמשת ב‑std::cout להדפסת ראשה.
'''C++ (סי פלוס פלוס)''' היא שפה לכתיבת תוכנות. היא נבנתה מעל שפת C בשנות ה־80. יש בה כלים לכתוב תוכניות מהירות ועוצמתיות.
ביארנה סטרוסטרופ התחיל לפתח את השפה ב־1979. השם C++ מראה שהיא הרחבה של C. הגרסה הראשונה יצאה ב־1985.
C++ מאפשרת כמה דרכים לתכנת: פרוצדורלי (שלב אחרי שלב), מונחה עצמים (מחלקות ועצמים, מבנים שמכילים נתונים ופונקציות) וגנרי (templates, תבניות שמייצרות קוד לכל טיפוס).
השפה נותנת שליטה רבה בזיכרון. זאת אומרת שהמתכנת יכול לנהל בדיוק מה קורה.
- מחלקה (class): תבנית שמגדירה טיפוס עם משתנים ופונקציות. עצם (object) נוצר מהמחלקה.
- ירושה (inheritance): מחלקה יכולה לקבל תכונות ממחלקה אחרת.
- פונקציות וירטואליות: שיטות שנקראות לפי סוג העצם בפועל.
- const (קבוע): מציין שמשתנה לא ישתנה אחרי ההגדרה.
- reference (ייחוס): דרך להפנות לאובייקט בלי להעתיק אותו.
- throw/try/catch: דרכים לטפל בשגיאות בזמן ריצה. throw זורק שגיאה. try בודק. catch תופס את השגיאה.
STL היא ספרייה מסודרת שמכילה כלים מוכנים, כמו רשימות ומערכים דינמיים (vector). זה מקל על העבודה.
מדפיסים עם std::cout וקוראים עם std::cin.
תוכנית פשוטה מתחילה ב־int main() ומדפיסה משפט למסך.
תגובות גולשים