Вызвать чистый виртуальный метод напрямую через указатель на базовый класс с абстрактным методом или через объект этого класса невозможно, так как он не имеет определения в базовом классе.
Однако, чистый виртуальный метод может быть вызван из конструктора или деструктора производного класса, в котором этот метод имеет реализацию. При этом вызов будет разрешен в статическом режиме, будет вызвана реализация того класса, в конструкторе или деструкторе которого происходит вызов.
Пример вызова из конструктора производного класса:
cpp
В данном примере, при создании объекта obj
класса Derived
, будет вызван конструктор Derived
, в котором происходит вызов pure_virtual_method()
. Поскольку в классе Derived
есть реализация этого метода, он будет успешно вызван.
При попытке вызвать чистый виртуальный метод из конструктора или деструктора абстрактного базового класса, в котором он объявлен, произойдет нарушение выполнения (undefined behavior), так как на момент выполнения конструктора или деструктора базового класса vtable еще
Вызвать чистый виртуальный метод напрямую через указатель на базовый класс с абстрактным методом или через объект этого класса невозможно, так как он не имеет определения в базовом классе.
Однако, чистый виртуальный метод может быть вызван из конструктора или деструктора производного класса, в котором этот метод имеет реализацию. При этом вызов будет разрешен в статическом режиме, будет вызвана реализация того класса, в конструкторе или деструкторе которого происходит вызов.
Пример вызова из конструктора производного класса:
cpp
В данном примере, при создании объекта obj
класса Derived
, будет вызван конструктор Derived
, в котором происходит вызов pure_virtual_method()
. Поскольку в классе Derived
есть реализация этого метода, он будет успешно вызван.
При попытке вызвать чистый виртуальный метод из конструктора или деструктора абстрактного базового класса, в котором он объявлен, произойдет нарушение выполнения (undefined behavior), так как на момент выполнения конструктора или деструктора базового класса vtable еще
Register or sign in to get access to full answers for all questions from the question bank.