C++
| C++ | ||||
| Paradigma | multi-paradigma, Objectgeoriënteerd | |||
| Verschenen in | 1983 | |||
| Ontworpen door | Bjarne Stroustrup | |||
| Typesysteem | statisch, zwak | |||
| 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 | |||
|
||||
C++ (uitgesproken als C plus plus) is een programmeertaal gebaseerd op C.
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. De naam is afkomstig van de programma-opdracht "C++", wat betekent: verhoog de waarde van de variabele C met 1.
Inhoud |
Objectgeoriënteerd [bewerken]
De belangrijkste uitbreiding op C is de toevoeging van klassen voor objectgeoriënteerd programmeren. De klasse-ondersteuning omvat onder andere
-
- vb: virtual void Print();
- abstracte klassen (of methoden)
-
- vb: virtual void Print()=0;
-
- vb: class Taxi: public Vervoermiddel { ... }
Templates [bewerken]
Een andere uitbreiding ten opzichte van C zijn templates (de basis van generiek programmeren). Een template of sjabloon is een functie of klasse die gebruik maakt 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.
Andere uitbreidingen ten opzichte van C [bewerken]
Naast de object-georiënteerde uitbreidingen biedt C++ nog enkele nieuwe zaken die in C niet aanwezig waren op dat moment.
- Een nieuwe commentaarstijl voor een enkele regel (met "//").
- De mogelijkheid variabelen te declareren vlak voor gebruik.
- Naamruimten.
- Function-overloading.
- Operator-overloading.
- Exception handling.
- Inline functies (ook beschikbaar in de C99-standaard).
- Een standaard string-type.
- Een standaard bool-type.
- Naast pointers ook references.
- Standaardwaarden bij het weglaten van argumenten.
- De operatoren 'new' en 'delete' ter vervanging van de functies 'malloc' en 'free'.
De C++-standaardbibliotheek en STL [bewerken]
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.
Geen superset van C [bewerken]
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.
Compilers [bewerken]
Er zijn verschillende compilers beschikbaar, zowel gratis als commercieel. Een aantal bekende zijn:
- GCC (Linux en vele ports naar andere besturingssystemen)
- Microsoft Visual C++ (Windows)
- Intel C++-Compiler (Linux, Windows)
- Digital Mars (DOS, Windows)
- Borland C++-Compiler (Windows)
IDE's [bewerken]
- Visual Studio van Microsoft (Windows)
- Dev-C++ Open source IDE met ingebouwde MinGW compiler. (Windows, Linux)
- QtCreator, een relatief jonge IDE, door Digia aangeboden als onderdeel van Qt. (Windows, Linux en Mac OS X)
- KDevelop, een IDE voornamelijk gericht op de ontwikkeling van KDE en Qt-programma's. (Linux)
- Code::Blocks [1], een gratis C en C++ IDE (Windows, Linux) gebaseerd op wxWidgets.
- Eclipse, een Open source IDE, veel gebruikt voor Java, maar met goede ondersteuning voor C++ via de CDT plugin.
- XCode IDE (MacOSX) IDE met o.a. ondersteuning voor C++ (bijvoorbeeld met Carbon framework), en Objective C (bijvoorbeeld met Cocoa framework).
- NetBeans (Windows, Linux, Mac OS X en Solaris)
- CodeLite (Windows, Linux en Mac OS X)
Vergelijkbare talen [bewerken]
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 dan weer niet op C++. Maar 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.
C++-voorbeelden [bewerken]
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 <vector> #include <iostream> #include <iterator> 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")); }
Bekende bibliotheken [bewerken]
- STL: Standard Template Library, de standaard.
- Boost: Boost C++ Library, bevat o.a. toekomstige toevoegingen aan de standaard.
- Qt: zeer uitgebreid en cross-platform, o.a. vooral gebruikt voor GUI-toepassingen.
- MFC: Microsoft Foundation Classes, gericht op Windows-toepassingen.
- WTL: Windows Template Library, gericht op Windows-toepassingen.
- ATL: Active Template Library, gericht op Windows-toepassingen.
Zie ook [bewerken]
Externe link [bewerken]
- (en) Officiële website
| Wikibooks heeft een studieboek over dit onderwerp: Cursus programmeren in C++. |
| Programmeertalen |
|---|
|
ABAP · ABC · ActionScript · Ada · Algol · APL · Assembleertalen · AWK · B · BASIC · BCPL · C · C++ · C♯ · Clean · Clipper · Clojure · COBOL · Curry · D · Eiffel · Erlang · F♯ · Forth · Fortran · Go · Haskell · Icon · J♯ · Java · JavaScript · JScript · Kotlin · Lisp · Logo · Lua · ML · Modula-2 · Oberon · Object Pascal · Objective-C · Ocaml · Oz · Pascal · Perl · PHP · PL/I · PL/SQL · Prolog · Prova · Python · Rexx · RPG · Ruby · SAS · Scala · Scheme · Self · Simula · Smalltalk · TCL · Vala · Visual Basic |