Наличие функции-члена с тем же именем, что и у базового класса, чрезвычайно плохо работает и подвержено ошибкам (что делает код нечитаемым для людей). Вы уверены, что не можете избежать этого?
Общепринятым условием является использование имен классов, начинающихся с заглавных букв, и функций-членов в нижнем регистре. Если вы будете следовать этому соглашению, вы не пострадаете, как вы!
Если вы действительно настаиваете, вы можете попробовать
(static_cast<Der*>(ptr))->Base();
Более безопасный способ - написать что-то вроде
{ Der* derptr = dynamic_cast<Der*>(ptr);
if (derptr)
derptr->Base();
}
Но на самом деле, вам следует избегать кодирования такого бессмысленного . Ваш код становится нечитаемым, и это повредит даже вам через несколько недель ...
Не забудьте скомпилировать свой код с помощью g++ -Wall -g
(улучшая его, пока вы не получите предупреждений о компиляции) и использовать отладчик gdb
для его отладки. Не забудьте завершить свои выходные операторы << endl
.
В вашем коде есть другие ошибки. Он не компилируется, даже если main
оставлено пустым