Объяснение того, почему конструктор не может быть виртуальным на основе изучения: исправить ошибки, если они есть
Я провел некоторое исследование, чтобы выяснить, почему конструктор не может быть виртуальным. Я укрепляю свое понимание здесь.
Сначала я объясню, что такое виртуальная функция, а затем объясните, почему конструктор не может быть виртуальным на основе первого объяснения.
Что такое virtual function
?
Виртуальная функция - это функция или метод в базовом классе, который могут быть переопределены или переопределены в производном классе, с помощью функции с та же подпись. Другими словами, виртуальная функция позволяет индивидуальная реализация метода базового класса в производном класс. Он должен быть объявлен с помощью ключевого слова
virtual
. В то время вызова виртуальной функции, решение выбрать, какую версию определения функции (в базовом классе или производном классе) производится в время выполнения, в зависимости от типа вызывающего объекта (динамический связывание).Когда функция объявляется виртуальной, она сообщает компилятору, что тип объекта, который будет вызывать виртуальную функцию, должен быть определяется только во время выполнения. Затем, основываясь на типе объекта, вызов функции должен быть связан с определением функции и необходимо вызвать соответствующую функцию.
Почему constructor
не может быть виртуальным?
Когда функция объявляется виртуальной, она сообщает компилятору, что тип объекта, который будет вызывать функцию, должен быть определяется только во время выполнения, а затем вызывает соответствующие версия функции, основанная на типе объекта.
Если конструктор должен быть объявлен виртуальным, он сказал бы, что компилятор, что тип объекта, который будет ссылаться на конструктор, должен определяется во время выполнения. Но для построения объекта точное тип объекта должен быть известен во время компиляции, а не во время выполнения. Вот почему конструктор не может быть виртуальным.
Я хотел бы, чтобы члены SO исправили ошибки в обоих ответах, если они есть. Я думаю, что это помогло бы мне и другим, если бы вы могли исправить ответы, переписывая их как свои ответы, а не просто указывая на ошибки.