Chlopaki to czemu ludzie uzywaja klas? z pespektywy ( strasznie ograniczonej) mojego programu wychodzi ze struktury sa bardziej praktyczne.
na pewno jest jakis haczyk?
Jak to bardziej praktyczne? Haczyk, nie ma haczyka.
Stroustrup(twórca C++) w książce "C++ Programming Language":
//"Styl który wybierzesz zależy wyłącznie od okoliczności i gustu. Ja przeważnie preferuje struktury dla klas w których wszystkie zmienne są publiczne. Myślę o takich klasach jako "nie do końca prawidłowe, zwyczajne struktury danych"
Funkcjonalnie nie ma żadnej różnicy poza domyślnym prywatny/publiczny"
//
Rzecz jasna inicjalizacja zmiennej przed wywołaniem konstruktora też jest dla klas ;)
Zatem lepiej jest używać klas i dobrą praktyką jest wręcz nadużywać zabezpieczeń. Dodatkowo w postaci słowa const dla wartości zwracanych przez funkcje i parametrów. Nawet jeśli zdarzy się wyjątkowa konieczność je siłowo ominąć przez const_cast<typ&> lub reinterpret_cast<typ> lub w C++11 słowem override. W przypadku private i protected można ominąć blokadę poprzez friend i to znacznie lepsza praktyka selektywnie się dzielić niż udostępnianie co popadnie publicznie.
Notabene funkcjonalność inicjalizacji została dodana w specyfikacji C++98r a dopiero w specyfikacji C++11 dodano możliwość wywołania konstruktora jednego typu przed wywołaniem konstruktora innego typu(analogicznie do inicjalizacji zmiennych po : ) co umożliwiło tworzenie łańcuszków wywołań konstruktorów zapożyczony z C#. Zmniejszyła się ilość duplikatów. Dawniej nie było i ucząc się wywoływałem konstruktor w ciele konstruktora.. co było koszmarnym błędem wynikającym z niezrozumienia. Wprowadzono bo tak powinno działać zgodnie z intuicją. Z prostą zmienną w ciele konstruktora nie ma problemu po co rzesadzać - definiuj w domyślnym konstruktorze bo pamięć jest już zaalokowana dla niej. Jeśli trafisz na problem w inicjalizacji domyślnych wartości dla klas w ciele rodzica to stosuj trik : Konstruktor klasy zostanie wywoływany przed wywołanien konstruktora rodzica inaczej byłby dopiero po lub natrafił być na Acces Violation.. ale pewnie jeszcze nie wiesz o co mi chodzi ;)
Zmierzam do tego żebyś stworzył w miare możliwości drugiego konstruktora który ma możliwość podania parametrów domyślnych i pokombinowania z obecnością dwóch. (Tak by nie duplikować kodu) To zaprocentuje w doświadczeniu.
Wracając do podstaw - w Twoim kodzie rzuca się najmocniej to że tworzysz funkcję zapamiętaj ale zmienne upubliczniłe. Standardowo tkwisz na etapie C i struktur(czyli programistycznego komunizmu wałkowanego przez nauczycieli) Raz ze względów na bezpieczeństwo dwa ze względu na obsługę klasy w aplikacji wielowątkowej lepiej stworzyć funkcję const o podobnej nazwie co zmienna, a realną zabezpieczyć przed nadpisaniem w dziale protected(dodając do ksywki np f_nazwa). Warto stosować const dla takich funkcji by zabezpieczyć siebie się przed pomyłką potraktowania funkcji odczytu jako zmiennej lvalue. Tak niewiele żeby uniknąć pułapek na przyszłość. Kolejnym etapem który wprowadzono 10 lat temu via Borland i Microsoft jest ichniejsze property. W C++ warto więc zamiast być leniwym nauczyć się "nadużywania" template i stosowania klas z przeładowanymi operatorami () i = to zastąpi proste zmienne znacznie ciekawiej i umożliwi operowanie jakby była np. integerem. Umożliwiając wbudowanie w nią mechanizmu dostępu wielowątkowego czy nawet zapisu historii zmian.. Różne cuda można wymyślać s jeśli się będzie szanowało prywatność obiektów(nie obchodził problemów słowem public:) to się później zwróci z nawiązką wtedy można powiedzieć - korzystam z C++ a nie C.
Nie wiem czy mnie zrozumiesz, ogólnie chciałem przekazać żebyś przy okazji nauki pośpiesznie olał kanony prawione przez nauczycieli i zapoznał się z klasami (chociaż pewnie w sumie ten program jest efektem szkoły) Oni najpierw uczą C później C++ nauczając nie C++ tylko jakieś pokraki w rozkroku. Do konstrukcji własnych obiektów również zalecam tworzenie pochodnych STL więc jak najszybsze zapoznanie się z template i dzidziczeniem i co za tym idzie też przeładowania operatorów i virtual. Stosowania jak często to jest możliwe bo pięknie dało by się zastosować nawyki ułatwiając pisanie. W szkołach każdy jest zmuszany do bycia Scottem Mayersem ewentualnie tworzenia własnego Boosta jakbyśmy żyli w latach 80 ubiegłego stulecia... Nie to żebym Ci narzucał wszystko naraz, ale jeśli masz czas to dobra możliwość nauki która zaprocentuje. struct.. jasne że bez różnicy ale jednak to symboliczna kotwica złych nawyków. To tyle od czlowieka który z nimi walczy :)