Конструктор копирования. Что это. Пример. Когда вызывается Копирование объектов по умолчанию C++ #82

preview_player
Показать описание
Понравилось видео или оказалось полезным? Подпишись!

Конструктор копирования. Что это. Пример. Синтаксис. Когда вызывается. Копирование объектов по умолчанию. C++ Для начинающих. Урок#82

Передача параметров в функцию по значению. Параметры функции. Передача аргументов в функцию. #34

Деструктор что это. Зачем нужен деструктор класса в ООП. Пример. Деструктор с параметрами. Перегрузка. C++ Для начинающих. Урок#80

Ключевое слово this. Что означает. Что это такое. Для чего нужен this указатель C++ Для начинающих Урок #81

Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)

или тут

Уроки по программированию
Рекомендации по теме
Комментарии
Автор

*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*

SimpleCodeIT
Автор

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

rocker
Автор

Урок довольно сложный и длинный, на запись и монтаж потратил 3 часа. Но конструктор копирования один из важнейших моментов в ООП, так что надеюсь всё не зря. Всем настойчивости в обучении! =)

SimpleCodeIT
Автор

Мой фарш в голове согласился принять это только с 4-го раза!! Хоть и тема трудноватая, но вы обладаете крутейшими преподавательскими способностями!!!! Спасибо, Сергей!!!!

ckufpwj
Автор

Общая картина понятна, но мозг ой как не хочет детально все усвоить. Спасибо за урок, и как обычно, лайкос:)))

SeshAlex
Автор

Спасибо огромное! Учусь в академии на программиста. Ваш канал посоветовала всем одногруппникам. Многие из них стали смотреть Ваши уроки. Недавно один из одногруппников сказал мне:"Забил на все и сутки смотрел SimpleCode, не мог оторваться". Как дополнительный материал Ваш канал просто бесценен!!!

juliakond
Автор

получается алгоритм такой:

в паблике класса два конструктора для одного класса: MyClass(int size) и MyClass(const MyClass &other)
После старта программы сначала создается объект MyClass a(10) и отрабатывает первый конструктор MyClass(int size)
при этом:
1) создается указатель на ячейки памяти *data. Из прошлых уроков такой указатель может также будет указателем на начало массива data[] объекта а.
2) скрытой переменной Size объекта присваивается значение size=10
3) массиву data[] устанавливается динамический размер =10
4) массив циклом заполняется значениями от нуля до девятки
5) выводится на экран сообщение "Вызвался конструктор"

далее в main переходим ко второму объекту класса MyClass b(a) и отрабатывает уже второй конструктор MyClass(const MyClass &other):
1) скрытой переменной Size объекта b присваивается значение size, такое же как у объекта а
2) создается указатель *data и выделяется память для нового объекта b или иначе для нового массива data[] объекта b.
3) через цикл в каждую ячейку массива объекта b копируются значения массива объекта а
4) вызывается сообщение "Вызвался конструктор копирования"

получается два одинаковых объекта с разными адресами памяти.
далее вызывается деструктор для второго объекта и потом для первого.
Это гениально просто! Получается, что применяется своеобразная перегрузка конструкторов. Однако на данном этапе не понятна практическая ценность этого, она расскрывается в следующем уроке.

Salavatk
Автор

Мдааа. Сложновато с первого раза. но ставлю лайк :))

rjbhxud
Автор

Сергей, не забрасывайте, пожалуйста, канал!!
Вы лучший учитель программирования в русскоязычном Ютубе!!!

lprjzrv
Автор

Понял с первого раза, новичков может сильно спутать пример применения Кк.
Вот, кто сразу не понял, постарался вычленить суть:

Конструктор копирования – конструктор, реализуемый по умолчанию, и вызываемый при копировании объекта класса(передача параметром переменной типа класс).

Его особенность в том, что он делает абсолютно идентичную копию объекта побитово.

Это может создать проблему в том случае, когда в описании класса мы реализуем динамический массив. В таком случае, при копировании экземпляра класса, динамический массив тоже скопируется, а также и адрес его указателя. Иначе говоря, два указателя будут хранить один и тотже адрес, и когда мы попытаемся реализовать оператор delete[] в деструкторе, он попытается дважды очистить одно и тоже место в оперативной памяти, что и вызовет ошибку.

Синтаксис:

class Human
{
public:
Human(const Human &other)
//передача параметром объекта типа класс, разумеется, по ссылке
{
}
};

sov.harlem
Автор

Конструктор копирования. Что это. Пример. Синтаксис. Когда вызывается. Копирование объектов по умолчанию. C++ Для начинающих. Урок#82

SimpleCodeIT
Автор

Работаю в студио 2022 и на этапе, когда создаем функцию Foo2(), у меня нет второго вызова деструктора, синтаксис абсолютно одинаковый, но при этом. при прохождении return temp; он не заходит в деструктор еще раз.

kaliban
Автор

Это просто самый лучший преподаватель, которого я встречал в своей жизни, так, как Вы обьясняете, не обьясняет никто. Посмотрел пару раз заново видео, было все равно непонятно, на 5 раз я понял как это элементарно и гениально, будто что-то щелкнуло в голове. Я обязательно часть первой зарплаты с работы в IT отправлю Вам. Спасибо большое!! Огромное, человеческое спасибо!!!

artur
Автор

Застопорился на этом видео жестко, впал в прокрастинацию на недельку, но я вернулся. Сергей, респект за твои труды)

vadimgreen
Автор

Что происходит, что происходит....Уже не понимаю, что происходит, как только закончилось процедурное программирование и началось объектно-ориентированное))))

ebjikkolu
Автор

Выскажусь по поводу всего курса. Канал - шикарный. Подача материала - просто о сложном.Без воды, все по делу.Хотелось бы, в Вашем изложении, разобраться с конструкторами переноса и, в целом, с "move semantics".Спасибо за Ваш труд.

armanmanukyan
Автор

спасибо тебе хороший и умный человек за твои уроки, если бы не ты, не знаю как бы в этом всем разбирался, комменты никогда не пишу, но уроки настолько хорошие, что нельзя не поблагодарить, здоровья тебе и твоим близким!

yanvolkovich
Автор

Долго держался, но вынужден признать - преп и его уроки гениальны!!! Другим далеко в объяснении подобных сложных вещей!!! Благодарю, и успехов и процветания !!!

iouribalachov
Автор

По вашим урокам понял и изучил больше чем за 2 семестра в институте, вот бы все преподаватели также хорошо всё объясняли, спасибо вам огромное!

sadMilkT_T
Автор

Самое сложное в программировании - это понять нахй это может пригодиться, так освоить было бы легче) Но определенно это лучшие лекции, вам в университете преподавать

aleksmall