Jump to content

Клонирование (программирование)

В информатике ( клонирование означает создание точной копии объекта , часто в рамках парадигмы программирования на основе экземпляров или объектно-ориентированного программирования ООП).

Мелкие копии

[ редактировать ]

В большинстве языков программирования (исключением является Ruby ) примитивные типы , такие как double, float, int, longи т. д. просто сохраняют свои значения где-нибудь в памяти компьютера (часто в стеке вызовов ). Используя простое присваивание, вы можете скопировать содержимое переменной в другую:

Копирование примитивных типов в Java или C++ :

int original = 42;
int copy = 0;

copy = original;

Многие языки ООП-программирования (включая Java , D , ECMAScript и C# ) используют ссылки на объекты. Ссылки на объекты, похожие на указатели в других языках, позволяют передавать объекты по адресу, поэтому не нужно копировать весь объект.

Пример Java при «копировании» объекта с использованием простого присваивания:

Object original = new Object();
Object copy = null;

copy = original; // does not copy object but only its reference

Объект не дублируется, переменные «оригинал» и «копия» фактически относятся к одному и тому же объекту. В C++ эквивалентный код

Object* original = new Object();
Object* copy = NULL;
copy = original;

дает понять, что это указатель на копируемый объект, а не сам объект.

Клонирование

[ редактировать ]

Процесс фактического создания еще одной точной копии объекта вместо его ссылки называется клонированием. В большинстве языков язык или библиотеки могут облегчить своего рода клонирование. На Яве Object класс содержит clone() метод , который копирует объект и возвращает ссылку на этот скопированный объект. Поскольку оно находится в Object class, все классы, определенные в Java, будут иметь метод клонирования, доступный программисту (хотя для правильной работы его необходимо переопределять на каждом уровне использования).

Клонирование объекта в Java:

Object originalObj = new Object();
Object copyObj = null;

copyObj = originalObj.clone(); // duplicates the object and assigns the new reference to 'copyObj'

Объекты C++ в целом ведут себя как примитивные типы, поэтому для копирования объекта C++ можно использовать оператор ' =' (присваивание) оператор. Для всех классов предусмотрен оператор присваивания по умолчанию, но его эффект можно изменить с помощью перегрузки операторов . При использовании этой техники существуют опасности (см. нарезка ). Методом предотвращения нарезки может быть реализация решения, аналогичного Java. clone() метод для классов и использование указателей. (нет встроенного clone() метод.)

Пример клонирования объекта на C++:

Object originalObj;
Object copyObj(originalObj); // creates a copy of originalObj named copyObj

Пример C++ клонирования объектов с использованием указателей (чтобы избежать нарезки, см. [1] ):

Object* originalObj = new Object;
Object* copyObj = nullptr;

copyObj = new Object(*originalObj); // creates a copy of originalObj and assigns its address to copyObj
  1. ^ См. вопросы и ответы на сайте en.allexperts.com. Архивировано 18 июля 2009 г. на Wayback Machine.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 75b895fd3d138e5f0e2bf5af1ad23777__1681209120
URL1:https://arc.ask3.ru/arc/aa/75/77/75b895fd3d138e5f0e2bf5af1ad23777.html
Заголовок, (Title) документа по адресу, URL1:
Cloning (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)