Welcome to Serpia's blog!

Blog Entry

C++ deel-6

Naar deel 5

Classes

in ontwikkeling!

De maker van C++, Bjarne Stroustrop, ontwikkelde C++ mede omdat hij Classes wilde toevoegen. Een concept afkomstig van de ontwikkeltaal Simula 67.

Een class is een datatype, welke door de programmeur te definiëren is. Een class bevat data en functies, we spreken respectievelijk over member data en member functies. Deze laatste noemt men ook wel 'methods'.

NB: Het is een goede gewoonte om de class op te splitsen in twee bestanden: de header (.h bestand) en de source (.c bestand). Dit is het scheiden van de 'interface' en de 'implementatie'. Dit blijft in deze uitleg buiten beschouwing.

De syntax voor het definiëren van een klasse (class) is als volgt):

We gaan de bovenstaande termen 'private' en 'public' toelichten aan de hand van een voorbeeld. De term 'protected' komt later aan bod.

Op regel 05 zien we de term 'private', de data binnen dit blok kan alleen maar worden benaderd door member functions van deze class. Als we een sprong maken naar regel 30 zien we wat er gebeurt: de compiler klaagt dat 'maat' (rechtstreeks) ontoegankelijk is. Data wordt dus 'verborgen' voor hetgeen zich buiten de class afspeelt.

Op regel 08 staat de term 'public', dit wil zeggen de deze functies via een instantie (zoals op regel 23 wordt gecreëerd, toegankelijk is. En natuurlijk kennen deze member functions teruggrijpen op hetgeen in 'private' wordt gedefinieerd!

Op regel 23 creëren we een instantie van de class. Middels de "." notatie, welke we ook hebben gezien in de data structuur 'struct', zijn de data functions (of 'methods') toegankelijk. Op regel 25 roepen we de method 'printWaarden()' aan zonder een waarde mee te geven. Omdat de parameter 'maat' niet wordt geïnitialiseerd, wordt 'garbage' geprint. In regel 27 wordt echter een waarde meegegeven en zie je nu zinnige output:

Constructors

Hierboven hebben we de method printWaarden() gebruikt zonder waarde voor 'maat', het resultaat was weinig zinvol. Om zulk gedrag te voorkomen kunnen we gebruik maken van Constructors. Een constructor wordt automatisch uitgevoerd als de class wordt aangeroepen en kan waarden initialiseren. Een constructor heeft dezelfde naam als de Class. Dankzij function overloading (eerder hier uitgelegd), kan een class meerdere constructors bevatten. Als je geen constructor definieert, wordt er automatisch een (weinig zinvolle) constructor gecreëerd. Een voorbeeld van een constructor is:

Hieronder zie je een uitgewerkt voorbeeld met twee constructors in de class 'Vierkant' zoals hierboven reeds beschreven, maar nu eerst de...

Destructors

Een destructor doet het tegenovergestelde, deze wordt aangeroepen voordat de instantie van de klasse verwijderd wordt. Deze kan dus handig zijn om het geheugen weer vrij te geven wat door de klasse is aangemaakt. Een destructor heeft de naam van de class voorafgaand door een tilde (~). Net als bij constructors, maakt de class zelf een destructor aan als de programmeur dat niet doet. Deze standaard destructor doet verder niets.

Hieronder een voorbeeld van constructors en een destructor in de class 'Vierkant':

De output verklaart veel van de werking van het bovenstaande:

Posted on April 2, 2009
0 Comments

Comments

Post a comment




Django!