SasQ
2007-09-04 22:22:18 UTC
Siema.
Przeglądając sobie C++ FAQ natknąłem się na taki motyw:
http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.2
i oczywiście pierwszą myślą, gdy zobaczyłem to:
class Car : private Engine
było: "WTF??! o_O"
Czy tylko mi się zdaje, czy oni w tym FAQ opowiadają bajki?
Piszą tam, że "private inheritance is a syntactic variant of
composition" ["Dziedziczenie prywatne jest składniową
odmianą zawierania"]. Jak dla mnie nie jest to prawdą, bo
dany zestaw funkcji/danych można odziedziczyć tylko raz,
a w przypadku zawierania można je mieć wielokrotnie
powtórzone w obiekcie. Kolejną różnicą jest fakt, że przy
zawieraniu nie można nadpisać metod wirtualnych, co jest
oczywiście możliwe gdy dziedziczymy.
To, że "z zewnątrz" dziedziczenie prywatne i zawieranie
wydają się wyglądać tak samo, nie oznacza jeszcze, że
to JEST to samo ;P Błędność podanego tam przykładu
narzuca się sama, gdy sobie uświadomić, że implementacja
klasy Car widzi tą zależność dziedziczenia i może z niej
korzystać. A jaki sens ma stwierdzenie, że samochód JEST
szczególnym przypadkiem silnika? :PPP Jest to idiotyzmem
nawet, jeśli reszta świata o tym nie wie ;J
Co o tym myślicie?
Mam rację, czy może coś przeoczyłem?
Przeglądając sobie C++ FAQ natknąłem się na taki motyw:
http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.2
i oczywiście pierwszą myślą, gdy zobaczyłem to:
class Car : private Engine
było: "WTF??! o_O"
Czy tylko mi się zdaje, czy oni w tym FAQ opowiadają bajki?
Piszą tam, że "private inheritance is a syntactic variant of
composition" ["Dziedziczenie prywatne jest składniową
odmianą zawierania"]. Jak dla mnie nie jest to prawdą, bo
dany zestaw funkcji/danych można odziedziczyć tylko raz,
a w przypadku zawierania można je mieć wielokrotnie
powtórzone w obiekcie. Kolejną różnicą jest fakt, że przy
zawieraniu nie można nadpisać metod wirtualnych, co jest
oczywiście możliwe gdy dziedziczymy.
To, że "z zewnątrz" dziedziczenie prywatne i zawieranie
wydają się wyglądać tak samo, nie oznacza jeszcze, że
to JEST to samo ;P Błędność podanego tam przykładu
narzuca się sama, gdy sobie uświadomić, że implementacja
klasy Car widzi tą zależność dziedziczenia i może z niej
korzystać. A jaki sens ma stwierdzenie, że samochód JEST
szczególnym przypadkiem silnika? :PPP Jest to idiotyzmem
nawet, jeśli reszta świata o tym nie wie ;J
Co o tym myślicie?
Mam rację, czy może coś przeoczyłem?
--
SasQ
SasQ