В идиоме виртуального конструктора мы видели способ создания объекта, тип которого не определен до времени выполнения. Можно ли создать объект, не зная его точного типа класса? Конструктор виртуальной копии решает этот вопрос.
Иногда нам может понадобиться построить объект из другого существующего объекта. Точно так же конструктор копирования делает то же самое. Начальное состояние нового объекта будет основано на другом существующем состоянии объекта. Компилятор вызывает вызов конструктора копирования, когда объект создается из другого объекта. Однако компилятору нужна конкретная информация о типе для вызова соответствующего конструктора копирования.
|
Что делать, если мы не можем решить, из какого типа объекта будет создана копия? Например, виртуальный конструктор создает объект иерархии классов во время выполнения на основе некоторого ввода. Когда мы хотим скопировать конструкцию объекта из другого объекта, созданного виртуальным конструктором, мы не можем использовать обычный конструктор копирования. Нам нужна специальная функция клонирования, которая может дублировать объект во время выполнения.
В качестве примера рассмотрим приложение для рисования. Вы можете выбрать объект, уже нарисованный на холсте, и вставить еще один экземпляр того же объекта. С точки зрения программиста, мы не можем решить, какой объект будет вставлен при копировании, так как это решение во время выполнения. Нам нужен конструктор виртуальных копий, чтобы помочь.
Точно так же рассмотрим приложение с буфером обмена. Буфер обмена может содержать различные типы объектов и копировать объекты из существующих объектов, вставляя их на холст приложения. Опять же, какой тип объекта должен быть скопирован — это решение во время выполнения. Конструктор виртуальных копий заполняет пробел здесь. Смотрите пример ниже,
|
Пользовательский класс, создающий объект с помощью виртуального конструктора. Объект, который будет создан, основан на пользовательском вводе. Action () создает копию создаваемого объекта и изменяет его атрибуты. Двойной объект создается с помощью виртуальной функции Clone (), которая также рассматривается как конструктор виртуальных копий . Принцип, лежащий в основе метода Clone (), — это строительный блок шаблона прототипа .
— Венки . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Продвинутый C ++ | Виртуальный конструктор
- Копировать конструктор в C ++
- Когда вызывается конструктор копирования?
- Когда мы должны написать наш собственный конструктор копирования?
- Конструктор копирования против оператора присваивания в C ++
- Почему аргумент конструктора копирования должен быть константным в C ++?
- Вызов виртуальных методов в конструкторе / деструкторе в C ++
- Различные методы для копирования в C ++ STL | std :: copy (), copy_n (), copy_if (), copy_backwards ()
- Что происходит, когда виртуальная функция вызывается внутри не виртуальной функции в C ++
- C | Расширенный Указатель | Вопрос 7
- Продвинутый C ++ с буст-библиотекой
- Продвинутый C ++ | Операторы преобразования
- C | Расширенный Указатель | Вопрос 9
- C | Расширенный Указатель | Вопрос 10
- C | Расширенный Указатель | Вопрос 8
0.00 (0%) 0 votes