Глубокое копирование C++

Как преобразовать строку в int в C++ Программирование и разработка

Копия означает то же самое для той же копии исходного объекта. В программировании существуют разные методы создания копий объектов. Копирование объектов, переменных может быть выполнено с помощью конструктора копирования или с помощью оператора присваивания по умолчанию «=». В коде C ++ можно делать два типа копий, т.е. Мелкую и глубокую. Вы можете использовать его для копирования любой переменной или объекта в коде. Когда у нашего объекта есть переменные, которые динамически распределяются по всей программе, нам нужно создать Глубокую копию такого типа объекта. В этой статье будет показано, как создать глубокую копию на C ++.

Неглубокая копия против глубокой копии

Прежде чем смотреть на пример с глубокой копией, нужно понять и неглубокую копию. Итак, неглубокая копия была создана, когда вы хотите скопировать все переменные одного объекта в другой объект. Вы можете назвать это зеркальным отражением, но это не оригинал. И исходный, и новый объекты, т.е. Реплика, будут ссылаться на один и тот же адрес памяти в неглубокой копии. Это означает, что как исходный, так и репликационный объекты будут распознаваться и извлекаться с одним и тем же адресом памяти. Когда пользователь пытается внести изменения в один объект, это автоматически отразит изменение и в другом объекте из-за того же адреса памяти. Это может вызвать множество ошибок при выполнении, и реальный объект и его копия будут уничтожены. Таким образом,

При использовании динамически назначаемых переменных рекомендуется использовать глубокую копию вместо мелкой копии. Глубокая копия может быть получена путем копирования всех данных объекта, т.е. Значений переменных, распределения памяти и ресурсов, в новый, в то время как реальный объект и его копия имеют совершенно разные адреса памяти. Его можно использовать для объекта, имеющего переменные, которые выделяются динамически. Итак, приступим.

Читайте также:  Учебное пособие по Ionic Framework: создайте свое первое кроссплатформенное приложение

Пример: Глубокая копия

Мы начали наш пример, чтобы продемонстрировать концепцию глубокого копирования в программировании на C ++, открыв консоль оболочки системы Ubuntu 20.04. Первое, что нужно сделать, — это создать новый файл C ++ для кода. Неизменной, старой и самой простой командой, предоставляемой дистрибутивом Linux для создания документа в его терминале оболочки, является инструкция «touch». Простое слово «прикосновение» будет использоваться в заголовке создаваемого документа. Не забудьте добавить расширение C ++ в конце имени документа; в противном случае код не будет работать в оболочке после выполнения файла. После создания файла следует его открыть.

Самое лучшее в Ubuntu 20.04 — это то, что он поставляется с некоторыми встроенными редакторами для открытия и редактирования файлов. Он содержит редактор «vim» для редактирования в очень красочной среде, текстовый редактор для обновления и редактирования кода в простейшей среде и редактор GNU Nano для создания и редактирования кода в оболочке. Таким образом, мы отказались от редактора кода, то есть редактора GNU Nano в нашем случае, и нано-слово используется для открытия документа «deep.cc». Инструкции по созданию и запуску документа «deep.cc» приведены на скриншоте ниже.

Самое лучшее в Ubuntu 20.04 — это то, что он поставляетс

После того, как редактор кода GNU Nano запустил в нем текстовый документ «deep.cc», мы должны сначала добавить в него несколько библиотек. Эти библиотеки необходимы для выполнения кода определенным образом. Поток ввода-вывода «io» включается с использованием слова «include» с символом решетки, то есть «#». Использование стандартного пространства имен необходимо для кода C ++, чтобы использовать в нем операторы cin и cout. Код был запущен с объявления нового класса с именем «Test». Этот класс инициализирован тремя целочисленными членами данных частного типа. Переменные «len» и «wid» являются обычными целочисленными переменными, а «age» — это переменная-указатель. Конструктор Test () был инициализирован, и он используется для прямой динамической инициализации указателя «age» некоторым значением целочисленного типа.

Переменные «len» и «wid» являются обычными целочисл

Была запущена определяемая пользователем функция с именем «set» без возвращаемого типа. Он принимает в параметрах три аргумента целочисленного типа, то есть «l», «w» и «a». Эта функция используется здесь для получения значений из функции main () и сохранения их в переменных или членах данных, объявленных ранее в начале класса «Test», то есть «len», «wid» и переменная типа указателя. «возраст». Другая определяемая пользователем функция с именем «display ()» использовалась без параметрических значений. Эта функция использует внутри себя один стандартный оператор cout. Оператор cout использует переменные «len», «wid» и «* age» для отображения значений, уже установленных функцией set ().

Оператор cout использует переменные «len», «wid»

Теперь мы использовали параметризованную функцию конструктора Test () класса Test для реализации концепции Deep Copy в нашей программе. Этот параметризованный конструктор будет вызываться при создании нового объекта. Он получает в своем параметре указатель типа «Тест», т.е. на исходный объект. Этот первый объект, переданный в параметрах, будет использоваться для копирования всех данных исходного объекта в новый объект, как это показано на изображении. Деструктор класса Test использовался для уничтожения объекта класса Test при удалении динамически выделяемой переменной памяти age (возраст) после того, как выполнение программы приближается к завершению. Здесь класс Test закрыт, и выполнение начнется с функции main.

Здесь класс Test закрыт, и выполнение начнется с

Теперь наступает основная функция. Выполнение начинается отсюда, когда создается первый объект «t1» класса Test. Конструктор «Test ()» запустится автоматически с созданием объекта «t1» и присвоением динамической памяти купола динамической переменной «age». Функция set () была вызвана с использованием объекта t1, и для установки значений переменных будет вызвана функция display () для отображения значений в оболочке. Второй объект, t2, был создан файлом с глубоким копированием всех данных объекта t1 путем присваивания. Здесь будет вызван параметризованный конструктор. Когда мы вызываем метод display () с объектом t2, он покажет тот же результат, что и для объекта 1. Деструктор будет выполнен автоматически, когда объект закончит работу.

Когда мы вызываем метод display () с объектом

После компиляции с g ++ и выполнения с «./a.out» мы получили те же результаты метода display () для объектов t1 и t2.

out» мы получили те же результаты метода display

Заключение

В этом руководстве по статье вы найдете объяснение Deep copy и демонстрационный пример. Мы начали это руководство с определения терминов «Копирование», «Глубокое копирование» и «Мелкое копирование». Затем мы рассмотрели разницу между использованием глубокого и поверхностного копирования в коде C ++ для копирования объектов. Мы добавили краткий и простой пример программы Deep Copy, чтобы продемонстрировать ее больше. Поэтому мы считаем, что эта статья будет очень полезной для всех наивных пользователей C ++ и тех, кто уже является экспертом в своей области.

Оцените статью
bestprogrammer.ru
Добавить комментарий