Specyfikatory dostępu C++
Specyfikatory dostępu
Do tej pory dobrze znasz public
słowo kluczowe, które pojawia się we wszystkich naszych przykładach klas:
Przykład
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Słowo public
kluczowe jest specyfikatorem dostępu.
Specyfikatory dostępu definiują, w jaki sposób można uzyskać dostęp do elementów członkowskich (atrybutów i metod) klasy. W powyższym przykładzie członkowie są public
- co oznacza, że można uzyskać do nich dostęp i modyfikować je spoza kodu.
Co jednak, jeśli chcemy, aby członkowie byli prywatni i ukryci przed światem zewnętrznym?
W C++ istnieją trzy specyfikatory dostępu:
public
- członkowie są dostępni spoza klasyprivate
- członkowie nie są dostępni (ani oglądani) spoza klasyprotected
- nie można uzyskać dostępu do członków spoza klasy, jednak można uzyskać do nich dostęp w klasach dziedziczonych. Więcej o Dziedziczeniu dowiesz się później.
W poniższym przykładzie pokazujemy różnice między public
członkami private
:
Przykład
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;
}
Jeśli spróbujesz uzyskać dostęp do członka prywatnego, wystąpi błąd:
error: y is private
Uwaga: Dostęp do prywatnych członków klasy można uzyskać za pomocą metody publicznej w tej samej klasie. Zobacz następny rozdział ( Enkapsulacja ), jak to zrobić.
Wskazówka: Dobrą praktyką jest deklarowanie atrybutów klasy jako prywatnych (tak często, jak to możliwe). Zmniejszy to możliwość zepsucia kodu przez Ciebie (lub innych). Jest to również główny składnik koncepcji enkapsulacji , o której dowiesz się więcej w następnym rozdziale.
Uwaga: Domyślnie wszyscy członkowie klasy są private
, jeśli nie określisz specyfikatora dostępu:
Przykład
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};