Re: Зачем нужны иерархии реализаций?
От: Кодт Россия  
Дата: 29.06.05 16:21
Оценка: 1 (1) +1
Здравствуйте, Alexey Chen, Вы писали:

AC>Зачем нужны иерархии реализаций? Не абстракных интерфейсов, а именно полноценных реализаций. Это когда конкретные классы публично наследуются.

AC>Как бы исчерпывающего ответа я не знаю. Так, на пальцах и небольших примерах. Может кто-то обьяснит это фундаментально?

Прагматический ответ:
Чтобы всю реализацию [класса-предка] не переписывать [в наследнике] с нуля ради какого-то тюнинга или расширения.

А публичность — чтобы в наследнике не переписывать с нуля интерфейсы предка.
struct IX { ... };
struct IY { ... };

class Base : public IX, public IY
{
public:
  nonvirtual_api();
  ...
};

class Derived_1 : public IX, public IY
{
  Base* impl; // агрегация как альтернатива наследованию
  ...
  // копируем интерфейс и реализацию (хотя бы в виде шлюзов к impl)
};

class Derived_2 : private Base,
  // копируем интерфейс
  public IX, public IY,
  ...
{
public:
  // копируем интерфейс
  using Base::nonvirtual_api();
  ...
};
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.