

Gertjan Laan (www.gertjanlaan.nl) was als docent werkzaam in het hoger onderwijs. Hij gaf jaren les in wiskunde en programmeertalen, waaronder C++ en Java.
Meer over Gertjan LaanAan de slag met C++
Paperback Nederlands 2021 7e druk 9789024438617Samenvatting
Deze geheel herziene zevende druk van ‘Aan de slag met C++’ is een grondige kennismaking met de objectgeoriënteerde programmeertaal C++ volgens de laatste standaarden C++11 en C++14.
In een heldere, aansprekende stijl zet de auteur eerst de basisprincipes van de taal uiteen, waarna in het tweede gedeelte onder meer het ontwerpen van klassen aan de orde komt, en het werken met objecten, overerving, dynamisch geheugen, templates, polymorfie, streams en exceptionhandling. Daar waar nodig verhelderen UML-klassendiagrammen de broncode.Verder biedt dit boek een nauwkeurige en leesbare inleiding in alle belangrijke begrippen uit de standaardbibliotheek (STL) zoals vector, list, stack, queue, deque, iterator, algoritmen, functieobjecten en lambdafuncties.
In de zevende druk is alle code in het boek is aangepast aan de laatste versie van C++. Zo wordt het gebruik van het globale statement ‘using namespace std;’ zoveel mogelijk vermeden. Uniforme initialisatie wordt vrijwel overal toegepast. In deze editie is er ook aandacht voor containerklassen uit de STL. De vele veranderingen en uitbreidingen die de taal de afgelopen jaren heeft ondergaan passeren zoveel mogelijk de revue.
Via de website is aanvullend materiaal beschikbaar: de broncode van alle voorbeelden uit het boek en antwoorden op de vragen en uitwerkingen van de opdrachten die aan het eind van elk hoofdstuk aan de orde komen.
Specificaties
Lezersrecensies
Inhoudsopgave
1 Introductie 21
1.1 Inleiding 21
1.2 De preprocessor, compiler en linker 21
1.3 Eerste voorbeeld 23
1.3.1 Toelichting bij het eerste voorbeeld 24
1.3.2 Declaratie van variabelen 25
1.4 Namespaces 27
1.4.1 Over using namespace std 29
1.5 Getaltypen 29
1.5.1 Expressies: de operatoren +, -, *, / en % 32
1.5.2 Typeconversie 33
1.5.3 De typecast 34
1.5.4 Assignment-operatoren 35
1.5.5 Uniforme initialisatie 36
1.5.6 De increment-operator ++ en de decrement-operator -- 37
1.5.7 De naam C++ 38
1.5.8 Postfix en prefix 38
1.5.9 Prioriteiten 39
1.6 Literals en constanten 39
1.6.1 Constanten 41
1.6.2 Constante expressie: constexpr 42
1.7 De scope van variabelen en constanten 43
1.8 Het type char 44
1.8.1 ASCII-code 45
1.8.2 Escape sequences 46
1.8.3 Literals van het type char 48
1.9 De typeaanduiding auto en decltype 49
1.10 De opmaak van de broncode 50
1.11 Samenvatting 50
1.12 Vragen 51
1.13 Opgaven 53
2 Selecties en herhalingen 57
2.1 Inleiding 57
2.1.1 Relationele operatoren 57
2.1.2 Logische operatoren: de en-operator && 58
2.1.3 Een bool-variabele 60
2.2 Het if-statement 61
2.3 Het if-else-statement 63
2.3.1 Over cin 65
2.4 Het switch-statement 65
2.4.1 Wat niet kan met een switch-statement 67
2.5 Het for-statement 68
2.5.1 Controlegedeelte van het for-statement 69
2.5.2 Zet geen puntkomma na het controlegedeelte 71
2.5.3 De scope van de controlevariabele 71
2.6 Recht onder elkaar zetten van gehele getallen 72
2.6.1 De manipulator setfill() 74
2.6.2 De manipulatoren hex, oct en dec 75
2.6.3 Het gebruik van setw() met tekst 76
2.6.4 Links of rechts uitlijnen 77
2.6.5 Het uitvoerformaat van floating-pointgetallen 78
2.7 Variaties met een for-statement 79
2.7.1 For-statement waarvan de body niet wordt uitgevoerd 82
2.8 Het enumerated type 83
2.8.1 strongly typed (scoped) enumerations 85
2.9 Het while-statement 86
2.9.1 Syntax van het while-statement 86
2.10 Het do-while-statement 88
2.10.1 De invoerbuffer 90
2.11 De oneindige loop 90
2.12 Het break-statement 92
2.13 Controleren van de invoer 94
2.14 Het continue-statement 95
2.15 Algoritmen: een loop binnen een loop 97
2.15.1 Genest for-statement 97
2.15.2 Het omgekeerde probleem 98
2.16 Samenvatting 102
2.17 Vragen 102
2.18 Opgaven 104
3 Functies 111
3.1 Inleiding 111
3.2 Een eenvoudige functie 111
3.2.1 Prototype 112
3.2.2 Implementatie van de functie 112
3.2.3 Functieaanroep 113
3.3 Een functie met argumenten 113
3.3.1 Voordeel van een functie met argumenten 116
3.3.2 Actuele en formele argumenten 116
3.3.3 Nog een functie 117
3.3.4 Defaultargumenten 118
3.4 Wiskundige functies 119
3.4.1 C++-library 119
3.5 Functies die een waarde afleveren 121
3.6 Gestructureerd programmeren en functies 122
3.7 Functies die geen waarde afleveren 125
3.8 Een constexpr-functie 125
3.9 Richtlijnen bij het schrijven van functies 126
3.10 Prototyping, aanroep, implementatie en volgorde 126
3.10.1 Het prototype of de declaratie van de functie 127
3.10.2 De functieaanroep 127
3.10.3 De definitie of implementatie van de functie 128
3.10.4 De volgorde van functies 128
3.10.5 Splitsen van header en implementatie 129
3.11 Lokale variabelen 130
3.11.1 De argumenten van een functie 132
3.12 Statische en globale variabelen 132
3.12.1 Statische variabelen 132
3.12.2 Initialisatie van statische variabelen 134
3.12.3 Globale variabelen 134
3.12.4 Globale en lokale variabelen met dezelfde naam 136
3.13 Reference-argument 136
3.13.1 Wanneer gebruik je een reference-argument? 138
3.14 Uitbreiding van de richtlijnen voor het schrijven van een functie 139
3.14.1 De functie verwissel() 140
3.15 Een functie die een referentie aflevert 142
3.16 Functieoverlading 145
3.16.1 Overladen op grond van aantal argumenten 145
3.16.2 Pre- en postcondities 147
3.16.3 Overladen op grond van type van de argumenten 147
3.17 Samenvatting 148
3.18 Vragen 149
3.19 Opgaven 150
4 C-arrays en pointers 153
4.1 Inleiding 153
4.2 Het geheugen 153
4.2.1 Bytes 153
4.2.2 Bits 154
4.2.3 Adressen 155
4.3 Arrays 157
4.3.1 Een C-array van doubles 159
4.3.2 De bovengrens van een array 160
4.3.3 Initialisatie van een C-array 161
4.3.4 De grootte van een C-array bepalen met sizeof 162
4.3.5 C-arrays en andere variabelen tegelijk declareren 163
4.4 Algoritme: zoeken van de grootste waarde in een C-array 163
4.5 C-array als argument van een functie 164
4.5.1 Nogmaals: zoeken van de grootste waarde in C-array 165
4.6 Een const-arrayargument 166
4.6.1 Algoritme: zoeken van een getal in een C-array 167
4.7 Range-based for 168
4.8 Tweevoudige arrays 169
4.8.1 Initialiseren van een tweevoudige C-array 170
4.8.2 Een tweevoudige C-array als argument van een functie 172
4.8.3 Een speelbord voor boter, kaas en eieren 174
4.9 Voor- en nadelen van C-arrays 177
4.10 Pointers 179
4.10.1 Opmerkingen over notaties bij het gebruik van pointers 181
4.11 De elementen van een C-array langslopen met een pointer 183
4.11.1 Opschuiven van een pointer naar double 185
4.11.2 Rekenen met pointers 186
4.11.3 De betekenis van *p++ 186
4.12 Pointers en arraynotatie 187
4.13 Een nullptr 188
4.14 Een adres als functiewaarde 189
4.14.1 Pointers naar een constante 191
4.14.2 Pointer-constante 192
4.15 Een const-pointer als argument 193
4.16 Pointer naar een functie 195
4.17 Typedef 198
4.17.1 Typedef voor functiepointer 199
4.18 Samenvatting 200
4.19 Vragen 201
4.20 Opgaven 201
5 Strings en vectoren 207
5.1 Inleiding 207
5.2 C-strings 207
5.3 Een string-object 208
5.3.1 Invoer van strings vanaf het toetsenbord 210
5.3.2 Combineren van cin en getline() 211
5.3.3 Invoerbuffer leegmaken 213
5.4 Samenvoegen en conversie 214
5.4.1 Uitvoer naar een string met een stream 215
5.5 Een paar functies van de klasse string 216
5.5.1 De lidfuncties length() en size() 216
5.5.2 De lidfunctie substr() 216
5.5.3 De lidfunctie replace() 217
5.5.4 De lidfunctie find() 217
5.5.5 De lidfunctie c_str() 219
5.6 Vergelijken van strings 219
5.7 Een iterator voor een string 220
5.7.1 Range-based for-statement en string 222
5.7.2 Omzetten van een string in hoofdletters 222
5.7.3 String omkeren 224
5.8 Vectoren 227
5.8.1 Een vector declareren en vullen 227
5.8.2 Iterator voor een vector 228
5.8.3 Auto, range-based for-statement en vector 229
5.8.4 Een vector initialiseren 230
5.8.5 Kopiëren van een vector 232
5.8.6 Een printfunctie voor een int-vector 232
5.8.7 De indexoperator van een vector 234
5.8.8 Het groeien van een vector 235
5.9 Functies van de klasse std::vector 237
5.10 De containerklasse array 238
5.11 Samenvatting 239
5.12 Vragen 240
5.13 Opgaven 240
6 Klassen maken 243
6.1 Inleiding 243
6.2 Een klasse voor bankrekeningen 243
6.2.1 Klassendiagram 244
6.2.2 De broncode van de klasse Bankrekening 244
6.2.3 Een constructor 245
6.2.4 De constructor toevoegen en aanroepen 246
6.2.5 Bankrekening-objecten maken 246
6.2.6 Uniforme initialisatie 247
6.2.7 De functie to_string() 248
6.2.8 Meer functies voor de klasse Bankrekening 249
6.2.9 De functie stort() 249
6.2.10 De functie neem_op() 250
6.2.11 De functie get_saldo() 250
6.2.12 Het nieuwe klassendiagram van Bankrekening 250
6.2.13 Nieuwe broncode van Bankrekening 251
6.3 Een klasse voor studenten 253
6.3.1 De attributen 253
6.3.2 Getters en setters 254
6.3.3 De broncode van de klasse Student 255
6.4 Data hiding 257
6.5 Een klasse voor datums 258
6.5.1 Implementatie van Datum 259
6.5.2 Const lidfuncties 260
6.5.3 Defaultwaarden voor constructor 261
6.6 Relatie tussen klassen 261
6.6.1 Een initialisatielijst 265
6.6.2 Een const reference-argument 266
6.7 Objecten 266
6.8 De kassa 267
6.8.1 Automatische defaultconstructor 268
6.8.2 Attribuut voor de kassa 268
6.8.3 Zelfgemaakte defaultconstructor 269
6.8.4 Een paar functies voor de kassa 269
6.8.5 Lidfuncties buiten de klasse definiëren 269
6.8.6 De scope-operator :: 271
6.8.7 Over inline functies 272
6.9 Over constructors 273
6.9.1 Constructor-overloading 273
6.9.2 Constructor met defaultargumenten 275
6.9.3 Constructor-overloading en defaultargumenten 275
6.9.4 Delegerende (delegating) constructor 276
6.9.5 Initialiseren van een constante in een klasse 277
6.9.6 Directe initialisatie van attributen 277
6.9.7 Een constexpr-constructor 278
6.9.8 Expliciete defaultconstructor 279
6.9.9 Constructor en delete 281
6.10 Het keyword struct 281
6.11 Samenvatting 282
6.12 Vragen 282
6.13 Opgaven 283
7 Objectgeoriënteerd ontwerpen 287
7.1 Inleiding 287
7.2 Teams van studenten 287
7.2.1 De copy-constructor 290
7.2.2 Twee kopieën of niet? 291
7.3 De klasse Team met een vector 292
7.3.1 Klassendiagram met een collectie 294
7.3.2 Compositie en aggregatie 295
7.3.3 Multipliciteiten in UML 296
7.4 Documentatie maken 297
7.4.1 Het schrijven van tekst voor doxygen 298
7.4.2 Genereren van de documentatie 300
7.5 Een winkel 301
7.5.1 Analyse 302
7.5.2 Een lijst van de zelfstandige naamwoorden 302
7.5.3 De klassen 303
7.5.4 De associaties 303
7.5.5 Navigeerbaarheid 304
7.5.6 Het type van de attributen 304
7.5.7 De functies 304
7.5.8 De broncode van de klasse Artikel 305
7.5.9 De broncode van de klasse Catalogus 306
7.5.10 Nogmaals over navigeerbaarheid 307
7.5.11 De broncode van de klasse Bestelling 307
7.6 Sms-dienst 307
7.6.1 Analyse van de sms-dienst 308
7.6.2 De lidfuncties 309
7.6.3 De broncode van SMS 310
7.6.4 De broncode van Provider 311
7.6.5 De pijloperator 312
7.6.6 De broncode van Mobiel 312
7.6.7 Forward declaratie 313
7.7 Samenvatting 314
7.8 Vragen 315
7.9 Opgaven 315
8 Conversie en operatoren 319
8.1 Inleiding 319
8.2 Constructors en conversie 320
8.2.1 Het woord explicit 320
8.2.2 Initialisatie met een string 321
8.2.3 Conversie na de initialisatie 322
8.2.4 Voorwaardelijke compilatie 324
8.2.5 Expliciet aanroepen van een constructor 325
8.3 Operator overloading 326
8.3.1 Unaire, binaire en ternaire operatoren 326
8.3.2 Een somfunctie 328
8.3.3 Tijdelijk object door een constructor laten maken 330
8.3.4 Een operator + in plaats van een somfunctie 330
8.3.5 Welke operatoren mag je overladen? 333
8.3.6 Overladen van unaire en binaire operatoren 333
8.3.7 Overladen van een toekenningsoperator 334
8.3.8 De pointer this 335
8.4 Globale en friend-operatoren 337
8.4.1 De friend-operator*() 338
8.4.2 Implementatie van friend buiten de klasse 340
8.4.3 Een globale operatorfunctie 341
8.4.4 Een insertion- of uitvoeroperator 342
8.5 Conversie van klasse naar een standaardtype 343
8.6 Conversie tussen klassen 344
8.7 Vragen 348
8.8 Opgaven 349
9 Overerving 353
9.1 Inleiding 353
9.2 Een basisklasse 353
9.3 Afgeleide klasse 355
9.3.1 Private, public en protected 356
9.3.2 Defaultconstructor van de basisklasse 358
9.3.3 Eigen constructor voor afgeleide klasse 358
9.4 Functie-overriding 360
9.5 Generalisatie 363
9.5.1 Aanroepen van functie in basisklasse 369
9.6 Afgeleide klasse van een afgeleide klasse 370
9.6.1 Initialisatielijst en indirecte basisklasse 373
9.6.2 Wat erft een afgeleide klasse niet? 373
9.6.3 Geërfde constructor (inherited constructor) 373
9.7 Toegangsregels 374
9.7.1 Wanneer gebruik je wat? 375
9.8 Multiple inheritance 376
9.8.1 Ambiguïteit bij multiple inheritance 378
9.9 Virtuele basisklasse 380
9.9.1 Oplossing via virtuele basisklasse 383
9.9.2 Initialisatielijst en virtuele basisklassen 386
9.10 Samenvatting 386
9.11 Vragen 387
9.12 Opgaven 387
10 Dynamisch geheugen 391
10.1 Inleiding 391
10.2 Dynamische arrays 391
10.3 Een destructor 394
10.3.1 Wanneer wordt een destructor aangeroepen? 396
10.3.2 Wanneer moet je zelf een destructor schrijven? 399
10.3.3 Memory leakage 399
10.4 Smart pointers 400
10.4.1 De klasse weak_ptr 402
10.5 Geheugentekort en new 403
10.6 Copy-constructor en toekenningsoperator 404
10.6.1 De copy-constructor 405
10.6.2 Een diepe kopie met de copy-constructor 406
10.6.3 De toekenningsoperator 407
10.6.4 Verwijderen van copy-constructor en toekenningsoperator 411
10.6.5 Herdefinitie van de indexoperator [ ] 412
10.7 Objecten en dynamisch geheugen 414
10.8 Een lineaire lijst 416
10.8.1 De opbouw van de lijst 417
10.8.2 Het maken van de lijst 417
10.8.3 De lijst langslopen met een pointer 419
10.9 Een verbeterde lijst 421
10.9.1 Een friend-klasse 422
10.9.2 Geen friend, maar public get-functies 424
10.9.3 Een destructor voor de lijst 425
10.10 Een iterator voor een lijst 427
10.11 Samenvatting 432
10.12 Vragen 432
10.13 Opgaven 433
11 Templates 437
11.1 Inleiding 437
11.2 Functietemplates 437
11.2.1 Een template voor de functie maximum 438
11.2.2 De essentie van het templatemechanisme 441
11.2.3 Functietemplate en zelf gedefinieerde klasse 441
11.2.4 Een functietemplate met twee template-argumenten 443
11.2.5 Overladen van functietemplate 444
11.2.6 Schrijven van een functietemplate 445
11.3 Klassentemplates 445
11.3.1 Implementatie van lidfunctie van een templateklasse 448
11.3.2 Defaultwaarde voor een template-argument 448
11.4 Template voor een lineaire lijst 448
11.4.1 Generieke lineaire lijst 449
11.4.2 Lidfuncties buiten de templateklasse implementeren 452
11.5 Afgeleide klasse van een klassentemplate 452
11.5.1 Afgeleide klasse zonder genericiteit 453
11.5.2 Afgeleide klasse met behoud van genericiteit 456
11.6 De klasse list uit de standaardbibliotheek 456
11.6.1 De functie merge() 462
11.6.2 Een templatefunctie voor print() 464
11.7 De klasse stack 466
11.7.1 Nut van een stack 467
11.8 De klasse queue 469
11.9 De klasse deque 471
11.10 Samenvatting 472
11.11 Vragen 472
11.12 Opgaven 473
12 Algoritmen 479
12.1 Inleiding 479
12.2 Soorten iteratoren 479
12.2.1 Speciale iteratoren 480
12.3 Een algoritme 481
12.3.1 Een const-iterator 483
12.3.2 Een algemenere versie van zoek() 484
12.3.3 Een functie zoek() voor een vector 485
12.3.4 Een templateversie van zoek() 486
12.3.5 De laatste versie van zoek() 488
12.4 Het algoritme std::find() 490
12.5 De algoritmen in de namespace std::ranges en in std 490
12.6 Het algoritme for_each() uit std::ranges 491
12.6.1 for_each met een globale functie 491
12.7 Functieobjecten 494
12.7.1 Het algoritme for_each en een functieobject 496
12.7.2 Functieobject met attribuut 498
12.8 Lambdafuncties 499
12.8.1 Lambdafunctie met of zonder expliciet return type 501
12.8.2 Lambdafunctie met capture list 502
12.8.3 Capture by reference 503
12.8.4 Mogelijkheden voor de capture list 505
12.8.5 De voorziening mutable 505
12.8.6 De lay-out van de code van een lambdafunctie 506
12.9 Projection 506
12.10 Unair predicaat 509
12.10.1 Unair predicaat en find_if() 510
12.10.2 Projectie en find_if 512
12.11 Sorteren 513
12.11.1 Objecten sorteren met behulp van een predicaat 515
12.11.2 Objecten sorteren met behulp van een projectie 518
12.11.3 Objecten sorteren met de spaceship-operator <=> 519
12.12 Het algoritme copy() 521
12.12.1 Een back inserter 522
12.12.2 Een front inserter 523
12.12.3 Een inserter die gebruikmaakt van insert() 523
12.12.4 Inhoud van container naar het scherm met copy 524
12.13 Een bestand schrijven en lezen met copy() 524
12.13.1 Een bestand maken met copy() 525
12.13.2 Een bestand lezen met copy() 527
12.13.3 Bestand met gehele getallen direct op het scherm zetten 528
12.13.4 Alle karakters uit een bestand lezen 528
12.14 Zelfgedefinieerd type en copy() 529
12.15 De algoritmen iota() en transform() 531
12.16 Over algoritmen, iteratoren, containers en streams 534
12.17 Ranges en views in C++20 534
12.17.1 Andere views 536
12.17.2 De adapters drop, take en filter 538
12.17.3 De view iota 539
12.18 Verschillende notaties van views en ranges 541
12.19 Samenvatting 542
12.20 Vragen 543
12.21 Opgaven 543
13 Polymorfie en virtuele functies
13.1 Inleiding
13.2 Drie klassen met een functie die to_string() heet
13.3 Een virtuele functie
13.3.1 Polymorfie
13.4 Polymorfie met rechthoeken en driehoeken
13.4.1 Dynamische of late binding
13.5 Abstracte klasse
13.5.1 Abstracte klasse Figuur
13.5.2 Een vector en een lijst met figuren
13.6 Virtuele functies in een keten van afgeleide klassen
13.7 Polymorfie via een referentie
13.8 Samenvatting
13.9 Vragen
13.10 Opgaven
14 Streams
14.1 Inleiding
14.2 Standaardstream-objecten
14.2.1 De standaardstreams cerr en clog
14.3 Een bestand maken en lezen met behulp van een stream
14.3.1 Een bestand lezen met behulp van een stream
14.3.2 Strings en bestanden
14.4 Het controleren van een stream
14.4.1 De functies eof(), fail(), bad() en good()
14.5 Drie manieren om een tekstbestand te lezen
14.6 I/O met objecten
14.6.1 I/O van objecten met behulp van operatoren
14.6.2 Minder foutgevoelige invoer
14.7 Objecten in een bestand
14.8 Mogelijkheden bij het openen van bestanden
14.8.1 Bestand later aan een stream koppelen
14.8.2 Bestand openen om aan het einde toe te voegen
14.8.3 Bestaand bestand openen en leegmaken
14.8.4 Per se werken met een bestaand bestand
14.8.5 Per se niet werken met een bestaand bestand
14.8.6 Lezen én schrijven uit een bestand: fstream
14.9 Random file access
14.9.1 Bestand openen met de file-pointer aan het eind
14.9.2 Opnieuw lezen uit hetzelfde bestand: de functie clear()
14.10 Binaire bestanden
14.10.1 Maken van een binair bestand
14.10.2 Lezen van een object uit een binair bestand
14.11 Kopiëren van een bestand
14.11.1 Kopiëren met behulp van rdbuf()
14.11.2 Kopiëren van een bestand naar het beeldscherm
14.12 Schrijven naar een string
14.12.1 Een ostreamstring leegmaken
14.13 Vragen
14.14 Opgaven
15 Excepties
15.1 Inleiding
15.2 Try, throw en catch
15.3 Verschillende excepties van hetzelfde type
15.4 Excepties van een verschillend type
15.4.1 Exceptie definiëren binnen een klasse
15.4.2 Alle excepties opvangen
15.4.3 Informatie in de exceptie
15.5 Re-throw
15.6 Excepties als afgeleide klassen
15.7 Standaardexcepties
15.7.1 Zelf een standaardexceptie opwerpen
15.8 Excepties specificeren in de declaratie van een functie
15.9 Invoer van bepaald soort getallen
15.10 Vragen en oefeningen
15.11 Opgaven
Bijlage A: Header en implementatie
P.1 Inleiding
P.2 Klassendeclaratie in header file
P.3 Implementatie in .cpp-bestand
P.3.1 Gebruikmaken van Persoon
P.4 Dubbele declaraties voorkomen
P.5 Templates en headers
Bijlage B: Namespaces
Q.1 Inleiding
Q.2 Een namespace maken
Q.3 Een namespace gebruiken
Q.4 De standaardbibliotheek en std
Bijlage C: Tabel van operatoren
Bijlage D: Gereserveerde woorden (keywords) en
voorgedefinieerde identifiers
Index 547
Rubrieken
- advisering
- algemeen management
- coaching en trainen
- communicatie en media
- economie
- financieel management
- inkoop en logistiek
- internet en social media
- it-management / ict
- juridisch
- leiderschap
- marketing
- mens en maatschappij
- non-profit
- ondernemen
- organisatiekunde
- personal finance
- personeelsmanagement
- persoonlijke effectiviteit
- projectmanagement
- psychologie
- reclame en verkoop
- strategisch management
- verandermanagement
- werk en loopbaan