Hermetyzacja (enkapsulacja) w programowaniu obiektowym oznacza ukrywanie szczegółów implementacji obiektu i kontrolowanie, kto może odczytywać lub modyfikować jego stan. W C++ realizuje się to przede wszystkim przez specyfikatory dostępu w definicji klasy: private, protected i public.
Odpowiedź "protected" jest poprawna, ponieważ jest to specyfikator dostępu, który ustanawia poziom pośredni: składowe oznaczone jako protected są dostępne wewnątrz klasy oraz w klasach pochodnych (dziedziczących), ale nie są dostępne z kodu "z zewnątrz" obiektu. To pasuje do idei hermetyzacji: dane są osłonięte przed przypadkowym użyciem przez klientów klasy, a jednocześnie mogą być bezpiecznie wykorzystywane przy rozszerzaniu klasy przez dziedziczenie.
Pozostałe odpowiedzi nie dotyczą hermetyzacji:
- "volatile" dotyczy informowania kompilatora o możliwych zmianach wartości poza kontrolą programu (np. sprzęt, wątki) i wpływa na optymalizacje, a nie na widoczność składowych.
- "constant" nie jest standardowym słowem kluczowym C++ (zwykle chodzi o "const"), a "const" opisuje niezmienność obiektu/zmiennej, nie poziom dostępu.
- "static" określa m.in. przynależność składowej do klasy (wspólnej dla wszystkich obiektów) lub czas życia/łączenie, ale nie jest mechanizmem kontroli dostępu do pól/metod.
W praktyce, jeśli pole ma być używane przez klasy pochodne, a nie ma być częścią publicznego API, wybiera się "protected". Jeśli ma być ukryte nawet przed dziedziczeniem, stosuje się "private", a jeśli ma być dostępne dla wszystkich użytkowników klasy — "public".