• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Statyczny enum dla klasy

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 20 lipca 2023 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)
Cześć.

Problem przedstawię na przykładzie:

Załóżmy, że mam enum class Button o elementach kolejno: play, pause, stop. Następnie tworzę klasę Radio o polu button typu Button(z enum class). Teraz chciałbym, aby klasa Radio miała wyłączny dostęp do enum class Button .

Koniec przykładu.

 

Jak to uzyskać?

 

Potencjalne rozwiązania i powody, dla których ich nie wdrożyłem:

1. Definicja enum class Button wewnątrz klasy Radio.
Każdy obiekt będzie miał swoją klasę enum, tylko po co, skoro ma być tylko do odczytu?

2. "Ukrycie" klasy wyliczeniowej w przestrzeni nazw.
To chyba tak, jakbym zabezpieczył hasłem fragment kodu. Mam klasę Radio w pliku Radio.h, który załączam do main.cpp, by móc z niej korzystać. Jeśli poznam przestrzeń nazw, to będę mógł korzystać z enum class Button w main.cpp (a miała to robić tylko klasa Radio).

Dodam, że zależy mi na enum, ponieważ wygodnie jest się odnosić do przycisku po jego nazwie, np. if(button == Button::play).

Proszę o pomoc.

1 odpowiedź

+3 głosów
odpowiedź 20 lipca 2023 przez adrian17 Ekspert (346,320 p.)

1. Definicja enum class Button wewnątrz klasy Radio.
Każdy obiekt będzie miał swoją klasę enum

Nie, "obiekt" nie ma "swojej klasy enum". Klasa jest jedna. W obiekcie w ogóle nie ma żadnych klas, w pamięci komputera każdy obiekt ma pola i tyle.

Więc jak enum ma być tylko dla klasy, to jak najbardziej po prostu zadeklaruj go w środku klasy.

komentarz 20 lipca 2023 przez adrian17 Ekspert (346,320 p.)

Zastanawiałem się, czy kiedyś, może nawet w niedalekiej przyszłości, spotkam się z takim problemem.

To w ogóle nie jest problem z którym się "spotyka" - kwestia dostępu do typów/interfejsów to coś na co programista decyduje się z własnej woli :) I tak się składa że po prostu ludzie zazwyczaj mają do tego mocno inne podejście niż wymyśliłeś.

komentarz 21 lipca 2023 przez TOWaD Mądrala (6,000 p.)
edycja 22 lipca 2023 przez TOWaD

A tak trochę głupot na początek weekendu.

protected by spełnił twoje wymagania, (tylko dziedzicenie zamiast przyjaźni).

tu -> działający i kompilujący się twój przykład.

ps. ale to tylko wypowiedz laika. Lepiej zastosować co adrian17 napisał.

Edit: :private HelpClass ?

komentarz 21 lipca 2023 przez Krzysztofs1234 Użytkownik (890 p.)
Cześć.

Dzięki za uzupełnienie, faktycznie, nie wiem, czemu sam po prostu nie dałem protected.

Będąc w temacie, może tak naprawdę szukałem odpowiednika "javowego" interfejsu w C++?
komentarz 21 lipca 2023 przez adrian17 Ekspert (346,320 p.)

Dzięki za uzupełnienie, faktycznie, nie wiem, czemu sam po prostu nie dałem protected.

To... nijak nie rozwiązuje tematu "dostępu"/"prywatności", to też nie ma sensu. "Chowanie" nic nie robi dla klas, bo każda klasa może sobie dodać dziedziczenie jak chce. Za to wolne funkcje w ogóle nie mają fizycznie możliwości nigdy uzyskać dostępu, więc jak chcesz móc przekazać jakikolwiek argument typu Button z zewnątrz, albo wynik `getButton()` zapisać do zmiennej?

Mówię Ci poważnie, nigdzie w żadnych programach nie znajdziesz tak napisanego kodu; ludzie tak nie robią bo to sztuka dla sztuki, nic nie daje a tylko komplikuje.

komentarz 21 lipca 2023 przez Krzysztofs1234 Użytkownik (890 p.)

"Chowanie" nic nie robi dla klas, bo każda klasa może sobie dodać dziedziczenie jak chce.

Słuszna uwaga. 

Podobne pytania

0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 20 grudnia 2017 w C i C++ przez Łukasz Wasilewski Mądrala (5,190 p.)
+1 głos
2 odpowiedzi 280 wizyt
pytanie zadane 25 grudnia 2020 w C i C++ przez TOWaD Mądrala (6,000 p.)
0 głosów
1 odpowiedź 506 wizyt
pytanie zadane 10 czerwca 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

92,681 zapytań

141,583 odpowiedzi

320,070 komentarzy

62,041 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...