Dlaczego C ++ nie pozwala klasom bazowym zaimplementować dziedziczonego interfejsu klasy pochodnej?
Oto o czym mówię
<code>// some guy wrote this, used as a Policy with templates struct MyWriter { void write(std::vector<char> const& data) { // ... } }; </code>
W niektórych istniejących kodach ludzie nie używali szablonów, ale interfejsy + wymazywanie typów
<code>class IWriter { public: virtual ~IWriter() {} public: virtual void write(std::vector<char> const& data) = 0; }; </code>
Ktoś inny chciał być użyteczny w obu podejściach i pisać
<code>class MyOwnClass: private MyWriter, public IWriter { // other stuff }; </code>
MyOwnClass jest zaimplementowany w kategoriach MyWriter. Dlaczego odziedziczone funkcje składowe MyOwnClass nie implementują interfejsu IWriter automatycznie? Zamiast tego użytkownik musi pisać funkcje przekazywania, które nic nie robią, ale wywołują wersje klasy bazowej, jak w
<code>class MyOwnClass: private MyWriter, public IWriter { public: void write(std::vector<char> const& data) { MyWriter::write(data); } }; </code>
Wiem, że w Javie, gdy masz klasę, która implementuje interfejs i wywodzi się z klasy, która ma odpowiednie metody, ta klasa bazowa automatycznie implementuje interfejs dla klasy pochodnej.
Dlaczego C ++ tego nie robi? Wydaje się, że to naturalne.