Wymiana metod między klasami

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ę

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ąć?

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.

0

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

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.

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 :)

0

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

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

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.

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.

0
MasterBLB napisał(a):

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

Działa praktycznie wszędzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1