1
Herinneringen
- Klassen voor geheugentoewijzing.
- Objecten bouwen, initialiseren en laden.
- Geheugenlekken.
- Constance, het sleutelwoord muteerbaar, Lazy Computation.
- Vriendschap C++ en toegangscontrole.
- Virtuele vernietiging.
- Strategie voor uitzonderingsbeheer.
- Naamruimten.
2
Nieuwe taalfuncties in C++11
- nullptr en andere literalen.
- De richtlijnen =delete, =default.
- Delegatie van fabrikant.
- Veilige opsommingen.
- Het trefwoord auto en loop over een interval.
- rvalue-verwijzing en invloed op de normale vorm van C++ klassen.
- Lambda-uitdrukkingen.
Praktisch werk
Bestaande C++-code herschrijven in C++11, waarbij de twee implementaties worden vergeleken.
3
Beheer operator
- Binaire en unaire operatoren.
- De indirectie operator, use case.
- De verwijzingsoperator.
- Prefixed en postfixed increment/decrement operatoren.
- Andere operatoren: vergelijking, toewijzing, enz.
- Overloading van de [] operator, de insertie (<<) en extractie (>>) operators.
- Functoren en operator overloading (), een voordeel ten opzichte van functies.
Praktisch werk
Creatie van functors en proxies (geheugenvrijgave, referentietelling) met de bestudeerde operatoren.
4
Conversie en RTTI
- Conversie operatoren. Impliciete constructies, het expliciete sleutelwoord.
- Casting operatoren const_cast, static_cast, reinterpret_cast.
- Dynamische conversie en Runtime Type-informatie.
- De typeid operator en gerelateerde uitzonderingen.
- De klasse type_info.
- Downcasting regelen met de dynamic_cast operator.
Praktisch werk
Implementatie van "is-a" en "is-kind-of" idiomen met dynamic_cast.
5
Algemeenheid
- Inleiding tot klassepatronen. Genericiteit en preprocessor.
- Generieke functie. Generieke klasse. Generieke samenstelling. Generieke generalisatie.
- Gedeeltelijke en volledige specialisatie.
- Inleiding tot metaprogrammeren.
- Genericiteit, het verenigende principe van de STL en Boost bibliotheken.
Praktisch werk
Start van de casestudie, die zal worden aangevuld met de STL. Implementatie van generieke compositie en generalisatie. Generieke plug-ins maken.
6
De STL (Standard Template Library)
- STL-componenten: complementaire types, containers, algoritmen, iterators, functieobjecten, adapters.
- STL tekenreeksen, de sjabloonklasse basic_string en zijn specialisaties.
- Sequentiële en associatieve containers: definitie, rol en selectiecriteria.
- Allocators en geheugenbeheer voor containers.
- Methoden voor invoegen, verwijderen, itereren en toegang tot de belangrijkste containers: Vector, Lijst, Set, Stapel, enz.
- Het iterator-concept. Navigeren door een container.
- De verschillende groepen STL-algoritmen: niet-mutant, mutant, sorteren en samenvoegen, numeriek.
- Omgaan met containers (manipulatie, zoeken naar waarden, enz.).
- Parametriseer generieke algoritmen met behulp van "functie"-objecten.
- Adapters" en het gedrag van een component wijzigen.
- STL en flowverwerking (bestanden, geheugen, enz.).
- Het RAII principe: automatische aanwijzers en de auto_ptr klasse.
- Standaard STL-uitzonderingen.
Praktisch werk
Implementatie van relaties met STL verzamelingen. Gebruik van standaard algoritmen.
7
Wat is er nieuw in de C++11 standaardbibliotheek?
- Historische evolutie: Boost --> TR1 --> C++11.
- Nieuwe containers: array, forward_list, unordered_set, unordered_map.
- De tuple klasse.
- Slimme pointers: shared_ptr, weak_ptr, unique_ptr.
- Nieuwe functoren en binders.
- Inleiding tot draadbeheer.
- Reguliere uitdrukkingen.
Praktisch werk
Robuustheid implementeren met slimme aanwijzers. Reguliere expressies gebruiken.
8
Boost en zijn principes
- De Pointer Container-bibliotheek (vernietiging van containerpointergegevens).
- De boost::any en boost::variant datastructuren.
- Event-driven programmeren (verbindingen en signalen).
- Procesbeheer, communicatiemechanismen tussen processen en gedeeld geheugen.
Praktisch werk
Verbeterde implementatie van de casestudy met behulp van de Pointer Container Library.
9
Geavanceerd gebruik van overerving
- Erfenis versus instappen. Privé-erfgoed. Beschermd erfgoed.
- Verborgen leden exporteren met de Using-clausule.
- Meervoudige overerving en beheer van botsingen tussen leden.
- Diamant overerving. Virtuele overerving en dynamic_cast.
- Ontwerpprincipes: Liskov substitutie, open/close principe, afhankelijkheidsinversie.
- Regels voor het implementeren van interfaces in C++.
Praktisch werk
Combineer meervoudige overerving, private overerving en export om robuuste, zeer schaalbare klassen te maken.