Co było uzasadnieniem wprowadzenia specyfikacji chronionego dostępu w C++. Przykład byłby pomocny.Uzasadnienie wprowadzenia specyfikacji chronionego dostępu
Odpowiedz
Poziom dostępu protected
jest używany, gdy zajęcia muszą współdziałać z ich spadkobiercami.
Na przykład wyobraź sobie abstrakcyjną klasę Shape
, która może zgłosić jej obszar do świata zewnętrznego.
Różne kształty, takie jak trójkąty, kwadraty i okręgi, są różnie opisane (kąt, bok, promień) i inaczej obliczyć ich powierzchnie.
Klasa Shape
może mieć publiczną metodę getArea()
, która zwraca prywatną zmienną trzymającą ten obszar.
Najlepszym sposobem na ustawienie tej zmiennej byłaby metoda protected
o nazwie setArea(double)
, która byłaby wywoływana przez klasy potomne.
Zatem Circle
nazwałbym setArea(PI * radius * radius)
, Square
nazwałbym setArea(side * side)
itd
pamiętać, że nie zawsze jest to dobry projekt (ale jest to świetny przykład protected
)
Najlepszym sposobem byłoby prawdopodobnie użycie wirtualnej metody "getArea". –
@Matthieu: Tak, ale oznaczałoby to ponowne obliczenie obszaru za każdym razem, gdy zostanie wywołany. – SLaks
Niekoniecznie, to zależy od formy pochodnej, aby zdecydować, czy warto buforować wynik. –
Dla tego rodzaju pytania, polecam Projekt i ewolucja C++ przez Bjarne Stroustrup. Sekcja 13.9 opisuje ewolucję chronionych członków.
Krótko po wydaniu 1.0 [z Cfront], Mark Linton zatrzymany przez mojego biura i dokonał zarzutu pasji do trzeciego poziomu kontroli dostępu [...] Twierdził przekonująco na podstawie autentycznego doświadczenia i przykłady z prawdziwego kodu że chronione dane były niezbędne do zaprojektowania wydajnego i rozszerzalnego zestawu narzędzi systemu Windows. [...] To były dobre argumenty, a przede wszystkim te, które przekonały mnie, że pozwolę członkom chronionym. [...]
Pięć lat lub później, Mark zakazała stosowania chronionych członków danych w Wywiady [X okna Toolkit wspomniano wcześniej], ponieważ stał się źródłem błędów. [...] Poważnie komplikują także konserwację [...]
Chronione elementy zostały wprowadzone do wersji 1.2. Zabezpieczone klasy bazowe zostały po raz pierwszy opisane w wydaniu 2.1. Z perspektywy czasu uważam, że
protected
jest przypadkiem, w którym "dobre argumenty" i moda pokonały moją lepszą ocenę i moje reguły dotyczące akceptowania nowych funkcji.
Nie mogłem się zgodzić, więcej chronionych członków danych stanowi naruszenie hermetyzacji. Używam tylko chronionych metod. –
@Matt: Moim zdaniem, pola w klasach powinny zawsze być domyślnie prywatne, bez mechanizmów, które temu zapobiegną, ponieważ zarówno publiczne, jak i chronione pola przerywają enkapsulację. – fredoverflow
Mam tutaj tę samą opinię.Nie możesz wymusić niezmienności klasy, jeśli ujawnisz swoich członków danych. –
- 1. Uzasadnienie dla chronionego destruktora
- 2. Kończenie chronionego procesu antywirusowego
- 3. Uzasadnienie projektu za STL
- 4. Uzasadnienie wyszukiwania Koeniga
- 5. Uzasadnienie 509 minimalnego limitu znaków
- 6. Jakie jest uzasadnienie kontekstu zeroMQ?
- 7. plik struts-config.xml - cel wprowadzenia
- 8. Jak uzyskać dostęp do chronionego elementu
- 9. std :: list <> :: splice unieważnia Iteratory. Racjonalne uzasadnienie?
- 10. Java: nie można uzyskać dostępu do chronionego członka nadklasy w rozszerzającej podklasie
- 11. Nie można uzyskać dostępu do chronionego elementu nadklasy z tego samego pakietu w innym słoju.
- 12. Sposób sekwencyjnego uruchamiania specyfikacji
- 13. Procedura specyfikacji pakietu
- 14. Wzorzec specyfikacji i wydajność
- 15. Znajdowanie specyfikacji .NET
- 16. Czytanie ze specyfikacji dynamicznego klucza
- 17. Uzasadnienie wielu legend w ggmap/ggplot2
- 18. Czy istnieje kiedykolwiek uzasadnienie "antypapieru pseudo-typedef"?
- 19. Jakie jest uzasadnienie wstępnych definicji w C?
- 20. Uzasadnienie preferowanego języka Pythona dla składni
- 21. Eliksir: uzasadnienie pozwalające na ponowne powiązanie zmiennych
- 22. ustaw limit czasu dla wprowadzenia użytkownika
- 23. Julia żąda wprowadzenia użytkownika ze skryptu
- 24. Wywoływanie zdarzenia "kliknięcie" bez wprowadzenia użytkownika
- 25. Dodaj dodatkowe dane do wprowadzenia simple_form
- 26. Egzekwowanie chronionego konstruktora w klasie pochodnej
- 27. PyCrypto: Generowanie klucza RSA chronionego hasłem DES3
- 28. Importowanie chronionego hasłem arkusza xlsx do R
- 29. Skrobanie forum chronionego hasłem w r
- 30. Błąd trybu chronionego przeglądarki Internet Explorer
Uzasadnieniem wydaje się być "musimy zrobić coś, aby język był bardziej skomplikowany, niż jest potrzebny i bardziej delikatny niż powinien być, aby konsultanci mogli pobierać ogromne opłaty za złą pracę". –