История изменений
Исправление m0rph, (текущая версия) :
Сладкое лучше солёного.
Не совсем. Использование наследования влечет за собой дополнительные трудности. Но само по себе наследование, как таковое, реально требуется для весьма узкого круга моделируемых сущностей. Обычно бывает достаточно, чтобы класс имел функции с определенными именами - т.е. по сути, реализовывал некий интерфейс. При чем совсем не обязательно от него наследоваться, как это сделано в Java. Интерфейсы в Go или трейты в Rust хорошие примеры того, как можно обойтись без наследования. А так как в C++ всего этого нет и приходится придерживаться таких странных правил, вроде «композиция лучше наследования».
Исправление m0rph, :
Сладкое лучше солёного.
Не совсем. Использование наследования влечет за собой дополнительные трудности. Но само по себе наследование, как таковое, реально требуется для весьма узкого круга моделируемых сущностей. Обычно бывает достаточно, чтобы класс имел функции с определенными именами - т.е. по сути, реализовывал некий интерфейс. При чем совсем не обязательно от него наследоваться, как это сделано в Java. Интерфейсы в Go или трейты в Rust хорошие примеры того, как можно обойтись без наследования.
Исходная версия m0rph, :
Сладкое лучше солёного.
Не совсем. Наследование, как таковое, реально требуется для весьма узкого круга моделируемых сущностей. Обычно бывает достаточно, чтобы класс имел функции с определенными именами - т.е. по сути, реализовывал некий интерфейс. При чем совсем не обязательно от него наследоваться, как это сделано в Java. Интерфейсы в Go или трейты в Rust хорошие примеры того, как можно обойтись без наследования.