Loading AI tools
programmeertaal van Bjarne Stroustrup Van Wikipedia, de vrije encyclopedie
C++ (uitgesproken als C plus plus) is een programmeertaal gebaseerd op C.
C++ | ||||
---|---|---|---|---|
Paradigma | multi-paradigma, Objectgeoriënteerd | |||
Verschenen | 1983 | |||
Ontworpen door | Bjarne Stroustrup | |||
Ontwikkeld door | Bjarne Stroustrup | |||
Huidige versie | C++23[1] 19 oktober 2024 | |||
Typesysteem | objectgeoriënteerd programmeren, functioneel programmeren, procedurele programmering, genericiteit | |||
Implementaties | G++, MS Visual C++, Borland C++ Builder, Intel C++ Compiler, Sun Studio | |||
Dialecten | ISO/IEC 14882 1998-2003 | |||
Beïnvloed door | C, Simula, Ada 83, Algol 68, Smalltalk | |||
Invloed op | Ada 95, C#, Java, Perl, D, PHP | |||
Bestandsextensies | cc, cpp, cxx, c, c++, h, hpp, hh, hxx, h++ | |||
Website | (en) Projectpagina | |||
|
In tegenstelling tot C is C++ een multi-paradigmataal, wat inhoudt dat er verschillende programmeerparadigma's gebruikt kunnen worden. De taal is ontworpen door Bjarne Stroustrup voor AT&T Labs, als verbetering van C.
Bjarne Stroustrup, een in Denemarken en het Verenigd Koninkrijk opgeleide computerwetenschapper, begon zijn werk aan "C with classes" (C met klassen) in 1979. Het idee om een nieuwe taal te ontwikkelen ontstond tijdens het programmeren voor zijn PhD-thesis. Stroustrup vond dat Simula bepaalde eigenschappen had die erg behulpzaam waren voor grootschalige software-ontwikkelingsprojecten, maar dat de taal te langzaam voor praktisch gebruik was. Aan de andere kant was BCPL snel, maar van een te "laag" niveau (te dicht op de "bitjes" en de "bytejes") om voor gebruik in grote software-ontwikkelingsprojecten geschikt te zijn.
Toen Stroustrup bij AT&T Bell Labs ging werken kreeg hij de opdracht om de UNIX-kernel te analyseren met het oog op gebruik in distributed computing. Met in gedachten zijn ervaringen bij het schrijven van zijn proefschrift begon Stroustrup aan een project om de programmeertaal C uit te breiden met Simula-achtige eigenschappen. Hij koos voor C omdat het een taal voor algemeen gebruik was die snel en gemakkelijk porteerbaar was en vooral op grote schaal werd gebruikt. Behalve door C en Simula werd hij ook geïnspireerd door Algol 68, Ada, CLU en ML. In eerste instantie werden de klasse, afgeleide klasse, sterke typering, inlining en default argument-eigenschappen via "C met klassen" aan de C-compiler, Cpre, toegevoegd.[2]
In 1983 werd de naam van de taal gewijzigd in C++ (de incremental operator in C is ++). Nieuwe functies werden toegevoegd, waaronder virtuele functies, overloading van functienamen en operators, referenties, constanten, door de gebruiker gestuurde allocatie en vrijgave van geheugen, verbeterde type checking, eenregelig commentaar met twee schuine strepen (forward slashes) (//
) zoals dat in BCPL gebruikt werd, alsook de ontwikkeling van een compiler voor C++, Cfront. In 1985 werd de eerste editie van The C++ Programming Language uitgebracht. Dit werd snel een belangrijk naslagwerk voor de taal, aangezien er op dat moment nog geen officiële standaard was.[3]
De eerste commerciële implementatie van C++ werd in oktober 1985 uitgebracht.[4] Versie 2.0 van C++ volgde in 1989 en de geactualiseerde tweede editie van The C++ Programming Language werd in 1991 uitgebracht.[5] Onder de nieuwe eigenschappen waren meervoudige overerving, abstracte klassen, statische memberfuncties, const-memberfuncties en beschermde members. In 1990 werd The Annotated C++ Reference Manual gepubliceerd. Dit werk werd de basis voor de toekomstige standaard.
Latere toevoegingen aan C++ zijn onder andere templates, exception handling, naamruimten, nieuwe casts en een booleaans datatype. Naarmate de C++-taal evolueerde, evolueerden de standaardbibliotheken mee. De eerste toevoeging aan de C++-standaardbibliotheek was de stream I/O-bibliotheek. Deze bibliotheek bood faciliteiten om de traditionele C-functies zoals printf en scanf te vervangen. Later was onder de belangrijkste toevoegingen aan de standaard bibliotheek een grote hoeveelheid van de Standard Template Library.
C++ was in 2022 een van de meest gebruikte programmeertalen voor het ontwikkelen van professionele applicaties.[6]
De belangrijkste uitbreiding op C is de toevoeging van klassen voor objectgeoriënteerd programmeren. Het is daardoor mogelijk in C++ objectgeoriënteerde en procedurele code te combineren.
De klasse-ondersteuning omvat onder andere
virtual void Print()
virtual void Print()=0;
class Taxi: public Vervoermiddel { ... }
Een andere uitbreiding ten opzichte van C zijn templates (de basis van generiek programmeren). Een template of sjabloon is een functie of klasse die gebruikmaakt van een abstract datatype.
Een voorbeeld is het berekenen van het gemiddelde van twee getallen. In plaats van aparte functies voor int, float en double kan een templatefunctie gebruikt worden:
template <class T>
T gemiddelde(T a, T b) {
return (a+b) / 2;
}
Deze functie kan vervolgens voor alle datatypen gebruikt worden die de operatoren + en / ondersteunen.
Naast de object-georiënteerde uitbreidingen bood C++ nog enkele nieuwe zaken die in C niet aanwezig waren op dat moment:
De standaardbibliotheek bevat alle functionaliteit van C, met daarbij een verzameling templates: de Standard Template Library (STL). Dit zijn algemene templates voor het beheren van containers als vectors, lists en maps.
In tegenstelling tot wat vaak wordt beweerd, is C++ geen zuivere superset van C. Niet alle geldige C-code is automatisch geldige C++-code. De meeste C-code zal probleemloos als C++ gecompileerd worden, maar er zijn kleine verschillen. Een andere programmeertaal, Objective-C, is wel een superset van C.
Andere object-georiënteerde talen die grotendeels gebaseerd werden op C++, zijn:
Ook PHP, hoewel een scriptingtaal, heeft sinds versie 4 (en vooral sinds 5) veel weg van C++.
Objective-C lijkt niet op C++. Beide talen ontstonden als object-georiënteerde uitbreiding op C, hun gemeenschappelijke voorouder. Hierdoor delen ze toch wat gelijkenissen en zijn ze tegenwoordig zelfs combineerbaar als Objective-C++ 2.0.
Er zijn verschillende compilers beschikbaar, zowel gratis als commercieel. Een aantal bekende zijn:
Er bestaan verschillende IDE's voor C++:
Een eenvoudig programma om "Hello World!" op het scherm te tonen, ziet er bijvoorbeeld zo uit:
#include <iostream> // Dit regelt de standaard in- en uitvoer binnen C++
int main() // De uitvoering van het programma begint bij main()
{
// Schrijf "Hello World!" naar de standard output stream cout (in de
// namespace std::)
std::cout << "Hello World!" << std::endl;
}
Merk in dit voorbeeld op dat de functie 'int main()' geen return-statement bevat: volgens de C++ standaard geeft de main-functie uit zichzelf de waarde 0 (nul) terug tenzij een andere return-waarde meegegeven wordt. Een 'return 0' statement is dus overbodig.
Een eenvoudig voorbeeld van een C++-consoleprogramma dat standaard invoer accepteert en uitvoer op het scherm toont, ziet er als volgt uit:
#include <iostream> // voeg de I/O bibliotheek toe (voor std::cin en std::cout)
#include <string> // voeg de string bibliotheek toe (voor std::string)
// cin, cout en string zijn onderdeel van de std:: namespace.
using namespace std; // maakt namespace std bruikbaar zonder de std::
// kwalificatie. 'using namespace' is handig omdat het
// minder typewerk is. Maar in grotere projecten kan je het
// beter niet gebruiken, omdat je dan niet kan zien uit
// welke namespace een variabele komt
int main()
{
// declareer twee strings en een integer
string strNaam;
string strVoornaam;
int nLeeftijd;
// vraag om voor- en achternaam
cout << "Wat is uw voor- en achternaam? ";
// ontvang invoer van de standaard input stream en plaats die in
// de variabelen strVoornaam en strNaam
cin >> strVoornaam >> strNaam;
// vraag om leeftijd
cout << "Wat is uw leeftijd? ";
// ontvang een regel van de standard input en zet die om naar een int
cin >> nLeeftijd;
// toon de ingevoerde gegevens
cout << "Hallo " << strVoornaam << " " << strNaam << endl;
cout << "U bent " << nLeeftijd << " jaar oud." << endl;
}
Een voorbeeld van een C++-consoleprogramma dat de kracht van de STL-templates laat zien:
Met dit programma kun je een aantal getallen ingeven, die vervolgens na het ingeven van het eerste niet-getal gesorteerd zullen worden en op het console getoond.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
istream_iterator<int> start(cin);
istream_iterator<int> end;
back_insert_iterator<vector<int>> dest(v);
copy(start, end, dest);
sort(v.begin(), v.end());
copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\n"));
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.