Programmeren in C++/Pointers: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Nijdam (overleg | bijdragen)
Geen bewerkingssamenvatting
Pjetter (overleg | bijdragen)
Met source
Regel 8:
 
 
<source lang=cpp>
<pre>
#include <iostream>
using namespace std;
Regel 21:
return 0;
}
</presource>
 
De uitvoer zou kunnen zijn (verschilt per computer):
Regel 33:
Een voorbeeld.
 
<source lang=cpp>
<pre>
int myAge = 15; // Maakt variabele myAge
int *pAge = 0; // Maakt pointer pAge
 
pAge = &myAge ; // zet het adres van myAge in de pointer pAge
</presource>
 
We declareren weer eerst een variabele, nl. 'myAge'. In de tweede regel declareren we een pointer, 'pAge', waarin we het adres van 'myAge' kunnen opslaan. Door het sterretje(*) voor 'pAge' wordt 'pAge' een pointer naar een integer. In de derde regel wordt in de pointer het adres van 'myAge' opgeslagen.
Regel 48:
Hoe werkt dit nu? Kijk even naar het volgende voorbeeld:
 
<source lang=cpp>
<pre>
int mijnLeeftijd = 18;
int *pLeeftijd = new int;
Regel 55:
cout << *pLeeftijd;
 
</presource>
 
Output: 18
Regel 71:
Behalve met variabelen werkt dit proces ook met objecten, zoals een class. Hier volgt een voorbeeld.
 
<source lang=cpp>
<pre>
#include <iostream>
using namespace std;
Regel 113:
}
 
</presource>
 
Zo dat ziet er waarschijnlijk een beetje moeilijk uit, no worry. Hier is de uitleg.
Regel 123:
In de main-functie krijgen we wel wat nieuwe dingen; die ga ik nu behandelen.
 
<source lang=cpp>
<pre>
CSimpleCat * pFrisky = new CSimpleCat;
</presource>
 
Wat zeggen we hier eigenlijk? In gewoon Nederlands zeggen we: "Maak een pointer van het type CSimpleCat in de vrije geheugenruimte met de naam pFrisky wat een CSimpleCat is". Logisch? Niet echt hè.
Regel 135:
Hoe bereik je nu de methoden van CSimpleCat door middel van je pointer? Ook hiervoor moet je indirectie toepassen wat betekent dat je het volgende krijgt:
 
<source lang=cpp>
<pre>
(*pFrisky).getAge();
 
</presource>
 
Omdat dit nogal omslachtig is, heeft men in C++ een verkorte versie gemaakt. De "->"-operator. Dus nu schrijf je:
 
<source lang=cpp>
<pre>
pFrisky->getAge();
</presource>
 
Om weer over niet-gebruikt geheugen te kunnen beschikken, moet je geheugenruimte vrijmaken. Dit doe je met delete.Daarmee voorkom je ook memory-leaks.
 
<source lang=cpp>
<pre>
delete pFrisky;
pFriksy = 0;
</presource>
 
Waarom zetten we pFrisky op 0? Als je dit niet doet krijg je een zogeheten wilde pointer. Het gevaar hiervan is, dat als je hem nog een keer verwijdert, in het mooiste geval je programma crasht, maar in het ergste geval je een vastloper krijgt.
Regel 157:
Nu kan je namelijk veilig het volgende doen:
 
<source lang=cpp>
<pre>
int *pInt = new int;
delete pInt;
*pInt = 0;
delete pInt;
</presource>
 
[[Categorie:C++|Pointers]]
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.