Programmeren in C++/Basis
C++ is een programmeertaal met veel dialecten. In C++ hangen die dialecten af van de soort compiler die je gebruikt. Elke compiler verschilt een beetje van een andere. Alle ondersteunen ze de ANSI/ISO standaard C++-functies, maar ook kent elk niet-standaardfuncties. Dat vormt een bron van verwarring.
Een compiler vervangt de code die de programmeur schrijft door uitvoerbare code (machinetaal). Een C++-programma begint met het uitvoeren van de functie main. Een functie is een verzameling commando’s of opdrachten. Vanuit de functie main kunnen we andere functies aanroepen. Om toegang te krijgen tot een standaardfunctie voeg je een header toe met de #include regel. Die opdracht voegt alles wat in de header staat aan je programma toe. Laten we eens kijken hoe een programma eruit kan zien:
C++-code:
#include <iostream>
using namespace std;
int main() {
cout<<"Hallo Wereld\n";
cin.get();
}
We bespreken een voor een de elementen van het programma.
- #include is een “preprocessor”-regel die de compiler vertelt code van de header iostream in ons programma te steken. Door headerbestanden in te voegen, krijg je toegang tot veel meer verschillende functies. Bijvoorbeeld, de functie cout heeft iostream nodig.
- Als tweede regel zien we “using namespace std;”. Dit is een opdracht voor de compiler die de compiler vertelt een groep functies te gebruiken die deel zijn van de standard library (std), zoals de verderop gebruikte functie cout. Door de grote hoeveelheid beschikbare functies die door verschillende mensen zijn geschreven, komt het voor dat sommige functies dezelfde naam hebben. Om aan te geven welke functie je in zo'n geval bedoelt, moet je refereren naar de namespace, in iedere namespace kan een functienaam maar één keer voorkomen. Met de bovenstaande regel geef je aan om standaard uit te gaan van de namespace "std". Je kan ook per functie aangeven welke namespace gebruikt moet worden door middel van de volgende syntax:
namespace::functienaam in dit voorbeeld dus "std::cout"
"std" refereert naar de standaard libraries van C++, dit zijn de functies die je het meest gebruikt, hierdoor is het een goed idee om je programma's van deze regel te voorzien. De puntkomma is deel van de syntax van C++. Het vertelt de compiler dat we aan het einde van een opdracht zijn. De puntkomma wordt gebruikt om bijna alle functies te beëindigen in C++.
- De volgende belangrijke regel is “int main()”. Deze vertelt de compiler dat er een functie main is, waarmee de uitvoering van het programma begint. De functie is van het type int, wat betekent dat de functie een integer als waarde teruggeeft. De {} duiden het begin en het einde van de functie aan.
- De volgende lijn ziet er waarschijnlijk een beetje raar uit. Als je in een andere taal hebt geprogrammeerd verwacht je dat print de functie zou zijn om tekst op het scherm af te drukken. In C++ wordt cout gebruikt om tekst af te drukken. cout is de afkorting van console output. Hij gebruikt de << symbolen, de “invoeroperatoren”. De aanhalingstekens vertellen de compiler dat je de tekst wilt uitvoeren als een string. Het ‘\n’ teken staat voor newline. Het beweegt de cursor van je scherm naar de volgende regel.
- Het volgende commando is cin.get(). cin is de afkorting van console input. De functie 'get' wacht tot de gebruiker op een toets drukt. Dit zorgt er voor dat we de uitvoer van het programma kunnen bekijken, voordat het programma wordt afgesloten.
- Wanneer we op het einde van de main functie komen, de sluitende }, zal ons programma de waarde 0 terugsturen (een integer, wat verklaart waarom we vertelden dat main een int moest terugsturen) aan het besturingssysteem. Deze waarde is belangrijk omdat die gebruikt kan worden om het besturingssysteem te vertellen of ons programma geslaagd is of niet. Een waarde 0 betekent "geslaagd"; deze waarde zal automatisch worden teruggestuurd (alleen voor main, voor andere functies moet je manueel een waarde instellen), maar als we iets anders wilden, zoals 1, zouden we de return regel moeten gebruiken, zoals hieronder:
C++-code:
#include <iostream>
using namespace std;
int main() {
cout<<" Hallo Wereld!\n";
cin.get();
return 1;
}
Je kan dit programma compileren en uitvoeren. Normaal is compileren zo simpel als een klik op de muis. Opmerkingen zijn erg handig voor alle programma’s. De compiler zal dit stukje code negeren tijdens het compileren. Om opmerkingen toe te voegen maak je gebruik van // of /* en */.
Nu zou je al een simpel programma moeten kunnen schrijven dat informatie terugstuurt die jij ingetikt hebt, en je programma kunnen voorzien van opmerkingen. Maar je zult ook interactie met het programma willen hebben. Gelukkig is het mogelijk om invoer aan het programma te geven. De functie die je hiervoor gebruikt is cin, gevolgd door de invoeroperator >>.
Voor je invoer kan ontvangen, moet je een plaats hebben om die ergens op te slaan. Daarvoor gebruiken we variabelen. Er zijn vele verschillende typen variabelen, wanneer je een variabele instelt moet je de compiler vertellen welk soort variabele het is (het data type), samen met de naam van die variabele. Voorbeelden van typen zijn: char, int, float...
Een variabele van het type char slaat één enkel karakter op, variabelen van het type int slaan integers op (getallen zonder decimalen) en variabelen van het type float slaan getallen met decimalen op. Elk van de namen van deze typen – char, int en float – is een sleutelwoord, dat je zal moeten gebruiken om een variabele in te stellen.
Soms kan het verwarrend zijn om meer typen variabelen te hebben en lijkt het alsof sommige overbodig zijn. Gebruik van het juiste type variabele kan belangrijk zijn om je code leesbaar en efficiënt te maken. Sommige typen hebben meer geheugen nodig dan andere.
Om een variabele in te stellen gebruik je de syntax "type <naam>". Je kan meerdere variabelen van hetzelfde type instellen op dezelfde regel, gescheiden door komma's. Om de instelling af te sluiten gebruiken we weer ;. Als je een variabele zonder type gebruikt, zal je programma niet worden uitgevoerd.
C++-code:
int x;
int a, b, c, d;
char letter;
float decimaal_getal;
Hoewel je meer variabelen van hetzelfde type kunt hebben, kan je niet meer variabelen met dezelfde naam hebben.
Hier is een simpel voorbeeldprogramma hoe je een variabele kunt gebruiken:
C++-code:
#include <iostream>
using namespace std;
int main() {
int getal;
cout<<"Geef een getal op aub: ";
cin>> getal;
cin.ignore();
cout<<"Je gaf: "<< getal <<" op.\n";
cin.get();
}
Laten we dit programma even bekijken. Het sleutelwoord int stelt de waarde van de variabele als een integer in. De functie cin>> leest een getal als waarde in; de gebruiker moet op de returntoets drukken voordat het getal is gelezen door het programma. Cin.ignore() is een functie die een karakter overslaat, negeert, bij het lezen. Wanneer je invoer ingeeft in een programma, moet je ook op return drukken. Die return hebben we niet nodig, dus negeren we hem. De variabele was ingesteld op integer; als de gebruiker een decimaal getal invoert zal het decimale gedeelte weggelaten worden. Wanneer we dit getal willen afdrukken moeten we het buiten de aanhalingstekens plaatsen, anders krijgen we dit: “Je gaf: getal op.”, en dat willen we niet. Zonder aanhalingstekens weet de compiler dat er een variabele gebruikt wordt, en hij dus die variabele moet vervangen door de inhoud. De twee invoeroperatoren zullen je waarschijnlijk verwarren. Dit is om de string te scheiden van de variabele. Vergeet niet te eindigen met een puntkomma. Het vergeten van de puntkomma is de meest voorkomende fout.
Maar, welk type je ook gebruikt, variabelen zijn niet handig zonder de mogelijkheid om ze te veranderen. Verscheidene operatoren worden gebruikt met variabelen: *, -, +, /, =, ==, >, <. Wanneer je de waarde van een variabele wil veranderen, moet je het isgelijkteken gebruiken. De == wordt gebruikt om de linker waarde te vergelijken met de rechter. Toch is het isgelijkteken heel handig, het kent de waarde aan de rechterkant toe aan de links geplaatste variabele. Ook kan rechts een uitdrukking staan met operatoren om wiskundige functies uit te voeren. Deze uitdrukking wordt eerst uitgerekend, waarna de waarde aan de variabele toegekend wordt.
C++-code:
a = 4 * 6; // a heeft als waarde 24
a = a + 5; // a wordt gelijkgesteld aan de waarde van a met 5 toegevoegd
a == 5; // Dit stelt a niet gelijk aan 5, maar vergelijkt a met 5