Rozważ następujące informacje:Czy można ukryć części hierarchii dziedziczenia w C++?
Klasa dziedziczy publicznie z klasy A
. Oba są dostarczane w bibliotece i nie mogę ich modyfikować.
Chcę zaimplementować klasę Foo
który wynika z B
, ale chcę, aby umożliwić użytkownikom Foo
używać tylko funkcje publiczne z A
i Foo
(nie z B
). Dla nich nie ma znaczenia, że Foo
dziedziczy po B
, jest to w zasadzie szczegół implementacji, którego nie mogę uniknąć.
Tak więc, w zasadzie chcę, aby Foo
dziedziczył publicznie od A
, ale prywatnie od B
.
Czy jest jakiś konstrukt w C++, który pozwoliłby mi to zrobić?
Muszę dodać, że dziedziczenie wirtualne nie wchodzi w grę, ponieważ A
, w moim przypadku, pochodzi z QObject
(patrz: Is it safe to use *virtual* multiple inheritance if QObject is being derived from DIRECTLY?).
(NB: Dla zainteresowanych: w moim przypadku, A
jest QWindow
i B
jest Qt3DExtras::Qt3DWindow
)
robi 'struct foo: A {B b; } 'praca? – Danh
Po prostu nie dokumentuj, że twoja klasa pochodzi od B. Powiedzmy, że wywodzi się z A. To nie jest metoda zatrzymania określonego użytkownika, który chce uzyskać dostęp do B, ale wtedy nic innego nie jest. –