Wpis z mikrobloga

#naukaprogramowania #cpp
Jaka jest dobra praktyka przy tworzeniu każdej klasy w osobnych plikach w sytuacji, kiedy mój program musi zawierać zmienne globalne np tablicę wartości? Gdzie ja umieścić w projekcie?

Druga sprawa to includowanie bibliotek standardowych w każdym pliku nagłówkowym trochę mija się z celem prawda? Jak najlepiej zaincludować np iostream jeżeli potrzebuje jej w każdej klasie?
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Heibonna: W cpp nie powinno być globalnych zmiennych, jeśli musisz je mieć, zrób jak mirek wyżej napisał.

Odpowiedź na drugie pytanie, zależy od Twojej odpowiedzi - po co Ci we wszystkich klasach dostęp iostream?
  • Odpowiedz
@Heibonna: Stwórz piątą klasę z interfejsem, który jest potrzebny w ramach pozostałych czterech klasach.

Jeśli to możliwe stwórz interfejs, który nie wymaga elementów z i zaincluduje tylko go w pliku źródłowym.
Jeśli niemożliwe jest stworzenie takiego interfesju, to po prostu dodaj iostream w pliku nagłówkowym piątej klasy.
  • Odpowiedz
@Heibonna: Zmienne globalne mozna trzymać w specjalnie do tego przeznaczonej klasie jako statyczne pola.

Biblioteki includiujesz zawsze tam gdzie ich potrzebujesz, więc nie wiem co to za pytanie. To że teraz potrzebujesz np. iostream w każdej klasie, to nie znaczy że zawsze tak będzie.

Jeśli chodzi Ci o to że w kilku plikach includujesz te same nagłówki to możesz sobie zrobić specjalny nagłówek tylko z tymi includami. Nie rób tego
  • Odpowiedz
Zmiennych globalnych nie rób w ogóle - to zła praktyka w 99% przypadków. Stałe globalne możesz robić - zrób je inline w nagłówku (jeżeli masz dostęp do C++17):
https://cpp-polska.pl/post/slowo-kluczowe-inline-czyli-jak-oszukac-linkerij

Include należy robic jak najmniej w naglowkach i kiedy to mozliwe robic w plikach cpp. Pozwoli Ci to na znaczne (kilkukrotne) obnizenie czasu kompilacji. Uzywanie tzw. precompiled headers tez jest dobrym pomysłem.
  • Odpowiedz