ΗC++ (διαβάζεται: σι πλας πλας[1] [siː plʌs plʌs]) είναι μία γενικού σκοπού γλώσσα προγραμματισμούΗ/Υ. Θεωρείται μέσου επιπέδου γλώσσα, καθώς περιλαμβάνει έναν συνδυασμό χαρακτηριστικών από γλώσσες υψηλού και χαμηλού επιπέδου. Είναι μιαμεταγλωττιζόμενη γλώσσα πολλαπλών παραδειγμάτων, μετύπους. Υποστηρίζει δομημένο, αντικειμενοστρεφήκαι γενικό προγραμματισμό.
Η γλώσσα αναπτύχθηκε από τονΜπιάρνε Στρούστρουπτο1979σταεργαστήρια Bell της AT&T, ως βελτίωση της ήδη υπάρχουσας γλώσσας προγραμματισμού C. Ουσιαστικά ήταν η γλώσσα C εφοδιασμένη με κλάσεις όπως αυτές της Simulaκαιγι' αυτό αρχικά ονομάστηκε "C with Classes".[1]Ο Rick Mascitti πρότεινε το όνομα «C++» στα μέσα του1983και έκτοτε επικράτησε.[1]Οι βελτιώσεις ξεκίνησαν μετην προσθήκη κλάσεων, και ακολούθησαν, μεταξύ άλλων, εικονικές συναρτήσεις, υπερφόρτωση τελεστών, πολλαπλή κληρονομικότητα, πρότυπα κ.α.
Η γλώσσα ορίστηκε παγκοσμίως, το1998, μετο πρότυπο ISO/IEC 14882:1998. Η τρέχουσα έκδοση αυτού του προτύπου είναι αυτή του2020, η ISO/IEC 14882:2020. Μια καινούρια έκδοση είναι υπό ανάπτυξη, γνωστή ανεπίσημα μετην ονομασία C++2b.
Στο βιβλίο The Design and Evolution of C++ (1994),ο Μπιάρνε Στρούστρουπ περιγράφει τα κριτήρια που χρησιμοποιεί γιατο σχεδιασμό της C++, εξηγώντας πως η C++ είναι σχεδιασμένη:
ως μία γενικής χρήσης γλώσσα μεστατικούς τύπους, που είναι όσο αποτελεσματική και φορητή, όσο η C
ώστε να δίνει επιλογές στον προγραμματιστή, ακόμα κιαντου επιτρέπει να επιλέξει λανθασμένα
με σκοπό να είναι όσο το δυνατόν συμβατή μετη C, διευκολύνοντας έτσι τη μετάβαση από τη C στη C++
με σκοπό να αποφεύγει χαρακτηριστικά που αναφέρονται σε συγκεκριμένες πλατφόρμες ή δεν είναι γενικής χρήσης
ώστε ναμην δημιουργείται επιπλέον επεξεργαστικό κόστος για χαρακτηριστικά της γλώσσας πουδεν χρησιμοποιούνται
ώστε να λειτουργεί χωρίς κάποιο εξελιγμένο προγραμματιστικό περιβάλλον
Το βιβλίο Inside the C++ Object Model (Lippman, 1996) περιγράφει πως οι μεταγλωττιστές μπορούν να μετατρέψουν εντολές ενός προγράμματος C++ σεμια διάταξη στη μνήμη. Παρόλα αυτά, οι συγγραφείς μεταγλωττιστών είναι γενικά ελεύθεροι να υλοποιήσουν το πρότυπο με δικό τους τρόπο.
Η C++ παρέχει περισσότερους από 30 τελεστές, που καλύπτουν τη βασική αριθμητική, το χειρισμό bit, αναφορά δεικτών, συγκρίσεις, λογικές πράξεις κ.ά. Σχεδόν όλοι οι τελεστές μπορούν ναυπερφορτωθούνγια τύπους ορισμένους από το χρήστη, με λίγες εξαιρέσεις όπως πρόσβαση μέλους (.και.*). Το πλούσιο σύνολο από τελεστές που μπορούν να υπερφορτωθούν είναι βασικό γιατη χρήση της C++ ως γλώσσα ειδικού πεδίου (domain specific language). Οι υπερφορτώσιμοι τελεστές είναι ακόμα βασικό μέρος πολλών προχωρημένων τεχνικών προγραμματισμού της C++, όπως οιέξυπνοι δείκτες. Η υπερφόρτωση ενός τελεστή δεν αλλάζει την προτεραιότητα των υπολογισμών όπου χρησιμοποιείται, ούτε τον αριθμό των τελεστέων που χρησιμοποιεί ο τελεστής (ανκαι οποιοσδήποτε τελεστέος μπορεί απλά να αγνοείται).