Конструктор копирования в C++ с примерами

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

Чтобы понять концепцию конструктора копирования, вам нужно понять, какой конструктор является первым. В программировании конструктор называется методом-членом, вызываемым спонтанно, как только создается сущность или объект. С другой стороны, конструктор копирования — это своего рода конструктор или метод, который инициализирует сущность или объект через другой объект или сущность аналогичного класса.

Откройте и войдите в систему Ubuntu 20.04 Linux. Убедитесь, что в вашей системе Ubuntu 20.04 настроен компилятор C ++. Если нет, откройте терминал командной оболочки с помощью «Ctrl + Alt + T». Теперь сначала установите пакеты, необходимые для сборки, используя apt. Для его установки может потребоваться пароль вашей учетной записи sudo. Добавьте пароль и нажмите Enter. Используйте для этого следующий запрос:

sudo apt install build-essential

После установки необходимых пакетов самое время установить компилятор языка C ++. Для этого используйте пакет apt для его установки. Используйте в оболочке следующий запрос:

sudo apt install g++

Теперь проверьте установленную версию компилятора c ++ в вашей системе. Для этого используйте следующую команду версии.

g++ —version

Пример 1

Вы должны понимать, что только неглубокая копия может быть сделана с помощью стандартного метода конструктора копирования. Неглубокая копия описывается как создание дубликата объекта путем репликации всей или большей части информации о переменных компонента в их текущем состоянии. Чтобы увидеть иллюстрацию и работу неглубокой копии с помощью конструктора копирования, давайте начнем с примера. Прежде всего, создайте новый файл c ++, используя расширение «cc» и сенсорную команду. Команда выглядит следующим образом:

touch main.cc

Откройте только что созданный файл » main.cc » в редакторе GNU, чтобы добавить в него код C ++, используя приведенный ниже код.

nano main.c

Теперь, когда файл открыт, напишите в нем приведенный ниже код. Сначала мы включили в код пакет стандартного потока ввода-вывода. Добавил пространство имен и создал класс «Тест». В этом классе мы определили переменные целочисленного типа x, y и z. Затем мы использовали метод конструктора, чтобы выделить некоторое пространство памяти для указателя z. Данные использовались для присвоения значений целым числам a, b и переменной-указателю z. Метод Show () использовался для печати значений, присвоенных переменным. Функция main используется для запуска компиляции кода. Мы создали единственный объект t1 для класса Test. Используя этот объект, мы передали некоторые значения функции «Данные». Затем мы использовали способ конструктора копирования, чтобы скопировать один конструктор в другой. Затем был вызван метод Show () с использованием второго объекта для печати значений целых чисел. Поскольку в примере ниже не указана функция Object (), фраза Demo t2 = t1; вызывает функцию компилятора по умолчанию Object (). Функция по умолчанию Object () создает глубокую или точную копию существующей сущности. В результате оба указателя объекта «z» относятся к одному и тому же адресу памяти. В результате, когда память одного поля освобождается, память другого поля также освобождается, поскольку оба поля связаны с одним и тем же адресным пространством. Сохраните файл с помощью Ctrl + S и закройте его, используя Ctrl + X, чтобы скомпилировать код. хранилище другого поля также освобождается, поскольку оба поля связаны с одним и тем же адресным пространством. Сохраните файл с помощью Ctrl + S и закройте его, используя Ctrl + X, чтобы скомпилировать код. хранилище другого поля также освобождается, поскольку оба поля связаны с одним и тем же адресным пространством. Также сохраните файл с помощью Ctrl + S и закройте его, используя Ctrl + X, чтобы скомпилировать код.

Читайте также:  Как использовать QTimer

Теперь, когда файл открыт, напишите в нем приведенный ниже код

Скомпилируйте свой код C ++ в оболочке через компилятор g ++, как показано ниже.

g++ main.cc

Давайте выполним файл, чтобы увидеть результаты метода неглубокого копирования конструктора копирования. Для этого попробуйте следующий запрос:

./a.out

Вывод показывает те же значения, которые передаются в переменные.

Пример 2

На этот раз мы будем использовать иллюстрацию Deep copy с использованием конструктора копирования. Глубокая копия резервирует пространство для реплики динамически перед копированием реального значения; оригинал и реплика имеют разные адреса памяти. И оригинал, и копия будут разными в этом смысле, и они никогда не будут занимать одинаковое пространство для хранения. Пользовательская функция Object () должна быть написана для глубокой копии. Откройте файл main.cc еще раз с помощью приведенной ниже команды.

nano main.cc

В этом примере весь код тот же, с небольшими изменениями. Потому что мы создали наш конструктор с именем «Test» в приведенном ниже сценарии и передали другой конструктор в параметре, связывающем объект с ним. Фраза Demo t2 = t1; использует определяемую пользователем функцию копирования Object (). Он дублирует данные типов контента, а также сущность, на которую указывает указатель z. Изменяемый ссылочный тип не копируется при использовании глубокой копии. Сохраните свой код на C ++ и закройте файл.

В этом примере весь код тот же, с небольшими изменениями

Теперь скомпилируйте файл main.cc с помощью следующей команды:

g++ main.cc

Выполните свой код и посмотрите результат, как показано ниже. Результат показан ниже.

./a.out

Пример 3

В нашем руководстве есть еще один пример конструктора копирования. Откройте тот же файл, чтобы обновить наш код, используя приведенную ниже инструкцию.

nano main.cc

Теперь файл открыт в редакторе GNU, обновите свой код с помощью скрипта на языке C ++, показанном ниже. Сначала мы включили поток ввода-вывода в код, а затем стандартно использовали пространство имен. Мы создали класс с именем «Class» и инициализировали два члена данных частного целочисленного типа a и b. Затем у нас есть 4 общедоступных метода. Два из них являются конструкторами, а два других — методами get () целочисленного типа. Первый конструктор прост, а второй конструктор создает глубокую копию, используя первый объект конструктора «c1». Метод getA () возвращает значение переменной «a», а другой метод getB () возвращает значение переменной «b» в основной метод. Основной метод создал объект первого конструктора и передал конструктору значения параметров. Потом, мы использовали технику конструктора копирования, чтобы скопировать один конструктор в другой. Значения были распечатаны в операторах «cout» с использованием обоих объектов по отдельности.

Теперь файл открыт в редакторе GNU, обновите свой код с помощью скрипта на языке C ++

Скомпилируйте и выполните приведенный выше код с указанными запросами. Выходные данные показывают разные значения для обоих объектов в оболочке.

g++ main.cc

$ ./a.out

Пример 4

Чтобы лучше понять концепцию конструктора копирования, у нас есть еще один пример. Откройте файл, чтобы обновить его.

nano main.cc

Мы создали новый класс «Комната» и добавили несколько частных данных-членов «l» для длины и «h» для высоты. Первый конструктор — это простой конструктор для инициализации значений, беря их из объекта. Другой конструктор использует первый объект конструктора путем привязки. Метод двойного типа Area () был использован для расчета площади комнаты. Основная функция — передача значений первому конструктору и печать площади комнаты через первый объект. Затем конструктор был скопирован, а затем значения были распечатаны через второй объект.

Мы создали новый класс «Комната» и добавили несколько частных

Скомпилируйте код.

g++ main.cc

Выполнение кода показывает результаты, представленные ниже.

$./a.out

Заключение

Мы рассмотрели концепцию конструктора копирования с примерами в нашем руководстве. В этом уроке мы также развили идею мелкого и глубокого копирования. Мы надеемся, что это руководство окажется для вас полезным.

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