C++ Toegangspesifikasies


Toegang tot spesifikasies

Teen hierdie tyd is jy redelik bekend met die publicsleutelwoord wat in al ons klasvoorbeelde voorkom:

Voorbeeld

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

Die publicsleutelwoord is 'n toegangspesifiseerder. Toegangsspesifiseerders definieer hoe toegang tot die lede (kenmerke en metodes) van 'n klas verkry kan word. In die voorbeeld hierbo is die lede public- wat beteken dat hulle van buite die kode af toeganklik en gewysig kan word.

Wat egter as ons wil hê dat lede privaat en verborge moet wees vir die buitewêreld?

In C++ is daar drie toegangspesifiseerders:

  • public - lede is toeganklik van buite die klas
  • private - lede kan nie van buite die klas verkry (of bekyk) word nie
  • protected- lede kan nie van buite die klas verkry word nie, maar hulle kan in geërfde klasse verkry word. Jy sal later meer oor Erfenis leer .

In die volgende voorbeeld demonstreer ons die verskille tussen publicen privatelede:

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;
}

As jy probeer om toegang tot 'n privaat lid te kry, vind 'n fout plaas:

error: y is private

Let wel: Dit is moontlik om toegang tot private lede van 'n klas te verkry deur 'n publieke metode binne dieselfde klas te gebruik. Sien die volgende hoofstuk ( Encapsulation ) oor hoe om dit te doen.

Wenk: Dit word as goeie praktyk beskou om jou klaskenmerke as privaat te verklaar (so dikwels as wat jy kan). Dit sal die moontlikheid van jouself (of ander) verminder om die kode te mors. Dit is ook die hoofbestanddeel van die Encapsulation - konsep, waaroor jy in die volgende hoofstuk meer sal leer.

Let wel: By verstek is alle lede van 'n klas privateas jy nie 'n toegangspesifiseerder spesifiseer nie:

Voorbeeld

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