С++ для начинающих Конструктор копирования Поверхностное знакомство

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Конструктор копирования. Первое знакомство.
Начинающие программисты могут наблюдать очень частое использование конструктора копирования другими программистами. Проблема возникает тогда, когда начинающий не понимает, зачем такой конструктор копирования используется.

Вообще, если программист не прописывает конструктор копирования своими руками, то компилятор сам вызывает такой конструктор каждый раз при создании класса, но иногда возникает необходимость прописывать такой конструктор копирования явно.

Немного о конструкторе копирования написано в википедии. Там попытка объяснить, зачем его нужно использовать. У меня не возникало необходимости, но по мере написания ваших программ вам может потребоваться использование конструктора копирования

Я предпочитаю более простые варианты для обучения и поэтому приведу максимально простой пример, который смог достать в просторах интернета. Это не объяснение, зачем нужен конструктор копирования, а пример его использования

Код С++ Конструктор копирования

Если вы немного понимаете классы и попробуете прочитать код не глядя на его выполнение, можно предположить, что произойдет присвоение в a2 данных из объекта a1, но при выполнении кода окажется, что это не так. Весь фокус в том, что когда вы прописываете конструктор копирования явно, то компилятор не создает неявных конструкторов копирования. Несмотря на то, что у нас в коде пустой блок, созданием своего такого конструктора мы проинструктировали компилятор, что мы отбираем у него полномочия на копирование данных из объекта в объект и будем крутить и копировать то, что нам надо своими руками. Так как блок пустой, то ничего и не происходит.

Что нужно делать, чтобы конструктор копирования, созданный нами работал и копировал данные одного объекта в другой? Нужно прописать код для такого копирования на месте пустого блока. Попробуйте немного подумать сами, что и чему нужно присвоить. Если придумать не можете, то только тогда смотрите

Напишите, выполните код. Вы увидите, что теперь присвоение одного объекта в другой срабатывает как нужно. Какие выводы можно сделать? Это говорит о том, что для того, чтобы копировать данные одного объекта в другой объект с помощью явно заданного конструктора копирования, нужно выполнить копирование своими руками. Если бы это был массив, нужно бы было выполнить поэлементное копирование каждого элемента массива. Аналогично для структур, аналогично для других случаев.

примечание
b=a.b; — В метод класса принимается ссылка на объект тип которого совпадает с типом класса текущего объекта, следовательно к элементам принимаемого объекта можно обратиться через точку. Нам нужно скопировать b из принимаемого объекта в b текущего.

Этот материал рассмотрен очень поверхностно, но может быть кому-то это поможет
Читать продолжение: Конструктор копирования. Причины использования

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

4 комментария: С++ для начинающих Конструктор копирования Поверхностное знакомство

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- Алло! Скажите, почему ваш антивирус так долго проверяет фильм? - А как вы хотели? Он его смотрит!

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок