Это идиома не виртуального интерфейса (NVI). На этой странице Херба Саттера есть много подробностей. Однако, утешите то, что вы там читаете, тем, что говорит C ++ FAQ Lite здесь и здесь .
Основным преимуществом NVI является отделение интерфейса от реализации. Базовый класс может реализовывать общий алгоритм и представлять его миру, в то время как его подклассы могут реализовывать детали алгоритма через виртуальные функции. Внешние пользователи защищены от изменений в деталях алгоритма, особенно если впоследствии вы решите добавить код до и после обработки.
Очевидным недостатком является то, что вам приходится писать дополнительный код. Кроме того, private
виртуальные функции сбивают с толку многих людей. Многие программисты ошибочно полагают, что вы не можете их переопределить. Хербу Саттеру кажется, что ему нравится private
виртуалов, но имхо на практике эффективнее следовать рекомендациям C ++ FAQ Lite и сделать их protected
.