Виртуальные функции работают за счёт создания таблицы виртуальных методов. В классе появляется скрытое поле, массив адресов виртуальных методов, где хранятся адреса текущих реализаций всех виртуальных функций. Его местоположение известно относительно начала класса. Соответственно, когда происходит вызов виртуального метода, программа переходит по адресу, который записан в таблице. В случае, когда инициализруется экземпляр производного класса, он перезаписывает адреса в таблице, если таковые были переопределены. Соответственно, когда происходит вызов через указатель на базовый класс, программа знает, где таблица, считывает оттуда адрес функции, и получает другое значение.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence