kzhereb / knu-is-ooop2019

Materials for "Fundamentals of OOP" course
MIT License
3 stars 0 forks source link

T10.08. Що робити, коли є циклічна залежність між класами? #8

Open WAG13 opened 4 years ago

solovdaria commented 4 years ago

Щоб позбавитись циклічної залежності між класами, можно виділити для них спільний батьківський клас, а їх відповідно зробити наслідниками цього класу.

AntonHladkiy commented 4 years ago

можна в одному із класів(А) об'явити інший клас(B) , а методи які використовують B записати не в класі А, а в класі B.(Forward declaration) //A.h class B; class A{ void method_with_B(B b); } //A.cpp

include "A.h"

//B.h class B{ void do_something(); void method_with_A(); } //B.cpp

include "B.h"

void B::method_with_A(){} void B::do_something(){} void A::method_with_B(B b){ b.do_something(); }

RostyslavMV commented 4 years ago

Найкращий варіант - намагатись уникнути циклічних залежностей. Але якщо так не вийде - можна спробувати просто зробити так, щоб члени класів не використовувались до їх опису, використовувати forward declaration.

i1red commented 4 years ago

Попередньо оголосити один з класів від яких існу залежність, винести їх методи в окремий файл(forward declaration)

ilyakorenevskyi commented 4 years ago

Краще за все, уникати таких ситуацій, змінивши структуру классів. Або використовувати forward declaration

WAG13 commented 4 years ago

Можна використовувати forward declaration