Правильно ли определено перегруженное виртуальное поведение?
Да, поведение примера хорошо определено.
Принимая во внимание приведенный ниже пример, что делать вы ожидаете, что будет напечатано, 11 или 12?
Сначала ожидается правильный вывод: 12, а затем 11. Перегрузка, объявленная в Derived
, скрывает все перегрузки из базовых областей.
Это может быть неочевидно, и кто-то может ожидать, что перегрузка long
будет выбрана из базового класса таким образом, что выходные данные будут 11 и 11. Если это - предполагаемое поведение, то вам необходимо повторно объявить другие перегрузки в производном классе. Вот так:
class Derived : public BaseImpl {
public:
using BaseImpl::test;
int test(double i) {return static_cast<int>(i + 2);}
Является ли поведение, регулируемое стандартом
Да.
и где я могу узнать больше об этом ?
Официальным источником будет стандарт.