Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Вызвать чистый виртуальный метод напрямую через указатель на базовый класс с абстрактным методом или через объект этого класса невозможно, так как он не имеет определения в базовом классе.
Однако, чистый виртуальный метод может быть вызван из конструктора или деструктора производного класса, в котором этот метод имеет реализацию. При этом вызов будет разрешен в статическом режиме, будет вызвана реализация того класса, в конструкторе или деструкторе которого происходит вызов.
Пример вызова из конструктора производного класса:
cpp
В данном примере, при создании объекта obj
класса Derived
, будет вызван конструктор Derived
, в котором происходит вызов pure_virtual_method()
. Поскольку в классе Derived
есть реализация этого метода, он будет успешно вызван.
При попытке вызвать чистый виртуальный метод из конструктора или деструктора абстрактного базового класса, в котором он объявлен, произойдет нарушение выполнения (undefined behavior), так как на момент выполнения конструктора или деструктора базового класса vtable еще
Вызвать чистый виртуальный метод напрямую через указатель на базовый класс с абстрактным методом или через объект этого класса невозможно, так как он не имеет определения в базовом классе.
Однако, чистый виртуальный метод может быть вызван из конструктора или деструктора производного класса, в котором этот метод имеет реализацию. При этом вызов будет разрешен в статическом режиме, будет вызвана реализация того класса, в конструкторе или деструкторе которого происходит вызов.
Пример вызова из конструктора производного класса:
cpp
В данном примере, при создании объекта obj
класса Derived
, будет вызван конструктор Derived
, в котором происходит вызов pure_virtual_method()
. Поскольку в классе Derived
есть реализация этого метода, он будет успешно вызван.
При попытке вызвать чистый виртуальный метод из конструктора или деструктора абстрактного базового класса, в котором он объявлен, произойдет нарушение выполнения (undefined behavior), так как на момент выполнения конструктора или деструктора базового класса vtable еще
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.