C++ Toegangspesifikasies
Toegang tot spesifikasies
Teen hierdie tyd is jy redelik bekend met die public
sleutelwoord wat in al ons klasvoorbeelde voorkom:
Voorbeeld
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Die public
sleutelwoord 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 klasprivate
- lede kan nie van buite die klas verkry (of bekyk) word nieprotected
- 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 public
en private
lede:
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 private
as jy nie 'n toegangspesifiseerder spesifiseer nie:
Voorbeeld
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};