Модификаторы доступа, такие как public
, private
и protected
, применяются только во время компиляции.Когда вы вызываете функцию через указатель на базовый класс, компилятор не знает, что указатель указывает на экземпляр производного класса.Согласно правилам, которые компилятор может вывести из этого выражения, этот вызов действителен.
Обычно семантическая ошибка уменьшает видимость члена в производном классе.Современные языки программирования, такие как Java и C #, отказываются компилировать такой код, потому что член, видимый в базовом классе, всегда доступен в производном классе через базовый указатель.