C++- toegangsspecificaties


Toegangsspecificaties

Inmiddels bent u redelijk bekend met het publictrefwoord dat in al onze klasvoorbeelden voorkomt:

Voorbeeld

class MyClass {  // The class
  public:        // Access specifier
    // class members goes here
};

Het publicsleutelwoord 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 klas
  • private - leden zijn niet toegankelijk (of bekeken) van buiten de klas
  • protected- 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 publicen privateleden:

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 privateals u geen toegangsspecificatie opgeeft:

Voorbeeld

class MyClass {
  int x;   // Private attribute
  int y;   // Private attribute
};