C++

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
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
Portaal  Portaalicoon   Informatica

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();
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:

IDE's [bewerken]

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]

Wikibooks Wikibooks heeft een studieboek over dit onderwerp: Cursus programmeren in C++.