Wymiana metod między klasami

Wymiana metod między klasami
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, mam problem z wykorzystaniem metody napisanej w klasie A chcę ją wykorzystać w klasie B. Otóż jeśli w klasie B w pliku nagłówkowym dam #include "A.h" to potem już w klasie A nie mogę dać #include "B.h" zaznaczam że dopiero się uczę

  • Rejestracja: dni
  • Ostatnio: dni
0

No to teraz kolejne pytanie. Czy coś takiego jest dobrą praktyką, czy powinno się tego unikać, czy to jest niedopuszczalne mimo że można to ominąć?

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
0

Same z siebie deklaracje wyprzedzające nie są złe. Natomiast często zwiastują zły (bo zamotany — a zamotany, bo trudno go zrozumieć liniowo, w oderwaniu od większej całości) kod.

  • Rejestracja: dni
  • Ostatnio: dni
0

Czyli stosowanie takiego sposobu jest raczej niemile widziane w c++ i należy się tego wystrzegać.

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
0

Nie byłbym tak radykalny (chociaż znam ludzi, którzy są). Wg mnie to tylko oznaka tego, że dobrze jest dać ten kod komuś do obejrzenia, może da się łatwiej/ładniej/czytelniej. Ale może się nie dać i wtedy używaj śmiało.

daniel1302
  • Rejestracja: dni
  • Ostatnio: dni
0

Jesli zachodzi taka zaleznosc, to prawdopodobnie architektura aplikacje jest zła jak powiedział @Althorion . Najczesciej stosowanym i najlatwiejszym rozwiazaniem wydaje sie wydzielenie 3 klasy ktora to spina :)

  • Rejestracja: dni
  • Ostatnio: dni
0

Dziękuje bardzo za wypowiedzi bardzo pomocne dla mnie i zapewne dla innych którzy pierwszy raz napotkają ten problem

tajny_agent
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1340
0

Forward declaration jest przydatne i może przyspieszyć kompilację, bo załączony header, może zawierać inne headery, które zawierają inne headery itd. A deklaracja to deklaracja - przeczyta, zapamięta i idzie dalej :P

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

Sposób na krzyżowe inkludowanie (plik1.h includuje plik2.h, a plik2.h includuje plik1.h) to dyrektywy preprocesora:
#pragma once - ale to działa tylko zdaje się w Visual Studio

tzw. declaration guard polegający na tym, że w plikach h masz:
#ifndef UNIKALNA_NAZWA_H, przeważnie się stosuje nazwę pliku zapisaną wielkimi literami, w tym przykładzie byłoby to PLIK1_H
#define UNIKALNA_NAZWA_H a konkretnie PLIK1_H

tu idzie zwykła zawartość pliku .h, czyli jakieś deklaracji klas, funkcji, zmiennych itd.

#endif //i na koniec zamknięcie strażnika.

dzięki strażnikowi wszystko, co jest zamknięte w dyrektrywach #ifndef / #endif wystąpi przy includowaniu tylko raz.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Dla mnie za mało kontekstu.
Ale ogólnie jestli klasa A zależy od B, a klasa B zależy od A, to najczęściej znaczy, że coś jest nie tak i to niezależnie od języka programowania.
Jedyny wyjątek od tej reguły jest wtedy jeśli jedna z tych klas jest używana tylko i wyłącznie przez tą drugą (np jak się implementuję listę).

Wszelkie cykliczne zależności w kodzie (które są widoczne na zewnątrz klasy), zwykle prowadzą do problemów.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
MasterBLB napisał(a):

#pragma once - ale to działa tylko zdaje się w Visual Studio

Działa praktycznie wszędzie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.