14.2 Dostępność składowych
Dalej: 14.3 Pola klasy
W górę: 14. Klasy (I)
Wstecz: 14.1 Wstęp
14.2 Dostępność składowych
Wszystkie składowe klasy są widoczne wewnątrz klasy, ale mogą
mieć różny poziom dostępności
z zewnątrz: poziom dostępności jest określany jednym ze słów
kluczowych:
public,
private,
lub
protected..
W odróżnieniu od Javy,
nie stawia się go jednak przed każdą
ze składowych osobno, a definicję klasy dzieli się na
tzw. sekcje: każda sekcja rozpoczyna
się od jednego z tych słów kluczowych z następującym po nim
dwukropkiem. Sekcja rozciąga się do końca definicji klasy lub do
rozpoczęcia innej sekcji, na przykład:
1. class Klasa {
2. int s1;
3. public:
4. int s2;
5. double d2;
6. private:
7. double s3;
8. void fun3(int,double);
9. public:
10. int s4;
11. char c4;
12. };
Zauważmy, że pole
s1 zostało zdefiniowane przed
pojawieniem się jakiegokolwiek specyfikatora poziomu dostępności.
Przyjmuje się wtedy dostępność domyślną, według następującej
zasady:
Klasy można definiować w C++ za pomocą słowa kluczowego
class lub
struct. Jeśli użyliśmy słowa
class, to domyślnie składowe są prywatne
(
private), jeśli użyliśmy słowa
struct,
to domyślnie składowe są publiczne (
public).
Innych różnic między klasami i strukturami w C++ nie ma!
Tak więc w powyższym przykładzie prywatne są
pola
s1,
s3 i funkcja (metoda)
fun3, natomiast publiczne
s2,
d2,
s4 i
c4. Jak widzimy, w definicji klasy (struktury)
może być wiele sekcji publicznych czy prywatnych.
Pod względem dostępności składowe dzielą się zatem na:
publiczne (
public),
których nazwy mogą być używane we wszystkich
miejscach programu, gdzie widoczna jest definicja
klasy;
prywatne (
private),
których nazwy mogą być używane tylko przez
funkcje, które same są składowymi tej samej klasy, lub
funkcje z daną klasą zaprzyjaźnione (o czym dalej);
chronione (
protected),
których nazwy mogą być używane tylko przez
funkcje, które same są składowymi tej samej klasy,
funkcje z daną klasą zaprzyjaźnione, a także
funkcje składowe i zaprzyjaźnione klas pochodnych
(dziedziczących z) danej klasy.
Te same zasady dotyczą nie tylko składowych, ale i innych nazw (jak
na przykład nazw typów czy aliasów definiowanych za pomocą
typedef) wprowadzanych w zakresie klasy. Wszystkie one
należą do przestrzeni nazw klasy, tak więc spoza klasy trzeba się
do nich odwoływać albo poprzez obiekty tej klasy (składowe
niestatyczne), albo poprzez kwalifikację nazw nazwą klasy przy
użyciu operatora zakresu '
::' (składowe statyczne, nazwy
typów zdefiniowanych w zakresie klasy, aliasy zdefiniowane za pomocą
typedef).
Zauważmy, że ograniczenie dostępności dotyczy nazw, a nie na
przykład obszarów pamięci zajmowanych przez składowe prywatne.
Rozpatrzmy króciutki program
Wyszukiwarka
Podobne podstrony:
node90node90node90 3NE42GHQQAH5GFSIPXZFFRNM6Q52JQYVOERSGQAnode90node90 SUYGEGH37H3OJGL4L2PHD6XDUX3VLGXUPN3GB6Anode90 ORR3JMDDCJRRACL2OZK7ISHTVVUM2WO5P6XTBJAnode90więcej podobnych podstron