C++- toegangsspecificaties
Toegangsspecificaties
Inmiddels bent u redelijk bekend met het public
trefwoord dat in al onze klasvoorbeelden voorkomt:
Voorbeeld
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Het public
sleutelwoord is een toegangsspecificatie.
Toegangsspecificaties definiëren hoe toegang kan worden verkregen tot de leden (attributen en methoden) van een klasse. In het bovenstaande voorbeeld zijn de leden public
- wat betekent dat ze van buiten de code kunnen worden geopend en gewijzigd.
Maar wat als we willen dat leden privé zijn en verborgen voor de buitenwereld?
In C++ zijn er drie toegangsspecificaties:
public
- leden zijn toegankelijk van buiten de klasprivate
- leden zijn niet toegankelijk (of bekeken) van buiten de klasprotected
- Leden zijn niet toegankelijk van buiten de klas, maar ze zijn wel toegankelijk in geërfde klassen. Over overerving leest u later meer.
In het volgende voorbeeld demonstreren we de verschillen tussen public
en private
leden:
Voorbeeld
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Als u probeert toegang te krijgen tot een privélid, treedt er een fout op:
error: y is private
Opmerking: het is mogelijk om toegang te krijgen tot privéleden van een klasse met behulp van een openbare methode binnen dezelfde klasse. Zie het volgende hoofdstuk ( Inkapseling ) hoe u dit moet doen.
Tip: Het wordt als een goede gewoonte beschouwd om uw klasseattributen als privé te declareren (zo vaak als u kunt). Dit verkleint de kans dat uzelf (of anderen) de code verknoeien. Dit is ook het hoofdingrediënt van het Encapsulation - concept, waarover u in het volgende hoofdstuk meer zult leren.
Opmerking: standaard zijn alle leden van een klas het volgende private
als u geen toegangsspecificatie opgeeft:
Voorbeeld
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};