Open yanaskyrda opened 4 years ago
C++ не передбачає використання віртуальних конструкторів, адже таблиця віртуальних методів ще не створена, отже конструктор повинен бути завжди не віртуальним
Питання про віртуальні конструктори є цікавим, оскільки в C ++ таких конструкторів не існує. "Віртуальний конструктор" - це скоріше патерн ООП, який легко реалізувати на C ++. Його ще називають фабричним способом. Віртуальний конструктор - це віртуальний метод, який визначає інтерфейс для створення деякого об'єкту, але залишає її реалізацію класам-нащадкам. Типове застосування цього патерну - це клонування об'єктів, тип яких невідомий на етапі компіляції. class A { public: virtual A *Clone() { return new A; } };
class B : public A { public: A *Clone() { return new B; } };
extern A ptr; / ми не знаемо, на який об'єкт посилаемось / ... A copy = ptr->Clone(); /створюємо копію об'єкта, не знаючи його точний тип /
У цьому прикладі Clone можна назвати віртуальним конструктором.
В С++ немає віртуальних конструкторів. Це неможливо, адже на момент його виклику немає об'єкту чи вказівника на нього.
В C ++ немає такого поняття як віртуальний конструктор, який би збирав потрібний нам об'єкт в залежності від будь-яких вхідних параметрів на етапі виконання. Зазвичай для цих цілей використовується параметризрваний Factory Method.
Конструктори не можуть бути віртуальними, ще немає таблиці віртуальних методів
Ні, в С++ не бувають., адже ще немає таблиці віртуальних методів
Використання віртуальних конструкторів у С++ не передбачено, бо всі virtual методи зберігаються у таблиці віртуальних методів об'єкта, яка налаштовується саме при виклику конструктора