В спецификации проекта (n3242) написано
Если виртуальная функция помечена с помощью переопределения virt-specier и не переопределяет функцию-член базового класса, программа некорректна.
Поскольку объявления функций, которые вы показываете, не являются виртуальными, вы также сталкиваетесь с
Virt-specier-seq должен содержать не более одного из каждого virt-спецификатора. Переопределение и final-спецификаторы virt-only должны появляться только в объявлении виртуальной функции-члена.
Обратите внимание, что функция, которая имеет то же имя и список параметров (включая constness), что и базовая функция, но это не virtual not переопределяет эту базовую функцию. Вместо этого говорится, что скрыть базовую функцию.
Обозначение, что функция скрывает базовую функцию, помещая new
вместо override
после того, как объявление функции было частью черновика C ++ 0x, но не будет частью C ++ 0x, так как были проблемы с поиск синтаксических пятен для нефункциональных членов для размещения new
во времени. Следовательно, он был отвергнут за C ++ 0x.