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

  Рет қаралды 273,279

#SimpleCode

#SimpleCode

6 жыл бұрын

Понравилось видео или оказалось полезным? Подпишись!
В этом уроке начнём рассматривать такие особенности ООП как перегрузка операторов. Для начала рассмотрим пример и синтаксис перегрузки, узнаем для чего нужна перегрузка операторов. Первая перегрузка пример которой мы рассмотрим будет перегрузка оператора присваивания. Обращаю ваше внимание на то, что для полного понимания этого вопроса вам необходимо знать что такое конструктор копирования и для чего он нужен. (ссылка на соответствующий урок чуть ниже в описании).
Перегрузка операторов пример. ООП. Перегрузка оператора присваивания. C++ Для начинающих. Урок#83
Конструктор копирования. Что это. Пример. Синтаксис. Когда вызывается. Копирование объектов по умолчанию. C++ Для начинающих. Урок#82
goo.gl/PC9SDX
Что такое null. null c++ что это. nullptr c++ что это. c++ nullptr vs null. nullptr c++11. #54
goo.gl/eb64mJ
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Пікірлер: 285
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
В этом уроке начнём рассматривать такие особенности ООП как перегрузка операторов. Для начала рассмотрим пример и синтаксис перегрузки, узнаем для чего нужна перегрузка операторов. Первая перегрузка пример которой мы рассмотрим будет перегрузка оператора присваивания. Обращаю ваше внимание на то, что для полного понимания этого вопроса вам необходимо знать что такое конструктор копирования и для чего он нужен.
@eninyri
@eninyri 4 жыл бұрын
привет. только ты не рассказал почему вызывается конструктор копирования после команды return *this ! давай раз уже начал!
@mukhavertolet
@mukhavertolet 4 жыл бұрын
@@eninyri никакой там конструктор копирования не вызывается
@daclicker
@daclicker 3 жыл бұрын
подскажите пожалуйста, где уроки с 63 по 83? Вы в 83 уже по полной в ООП углубляетесь, а на 63 только подбирались. Думал я дурак, но все обыскал и не нашел(
@user-iy5kd3tz3d
@user-iy5kd3tz3d 3 жыл бұрын
Чувствую, нужно покупать вентилятор по мощнее, мой мозг перегрелся)) Возврат ссылки на объект меня просто убил, пытаюсь переварить этот урок))
@777noob777saibot
@777noob777saibot 3 жыл бұрын
Честно говоря теперь код стал довольно большим, со всякими конструкторами , деструкторами и перегрузками....и поэтому теперь чтобы нормально разобраться нужно посмотреть на код целиком, а у тебя в окне Студии видна только часть кода и при таком быстром скроллинге разумеется ничего не успеешь рассмотреть, а на паузу ставить тот ещё геморой. Жаль что исходный код теперь недоступен.
@user-me5bb3ig3k
@user-me5bb3ig3k 6 жыл бұрын
1:15 "А" равно, ну к примеру, 5. а=2
@fenikdolgouhiy4624
@fenikdolgouhiy4624 6 жыл бұрын
Иван Гончаренко И так по жизни. А потом ищешь что не работает :D
@adiletastana2781
@adiletastana2781 5 жыл бұрын
Ну ошибся человек, с кем не бывает. Тем более это обычная интовая переменная.
@dmytrolytvynenko6537
@dmytrolytvynenko6537 5 жыл бұрын
@@adiletastana2781 однажды из-за одного бита, не байта, а бита, случилось авиакрушение
@user-qp3xs4jj5p
@user-qp3xs4jj5p 4 жыл бұрын
@@dmytrolytvynenko6537 вашего пукана?)
@user-wz5fn9mu2q
@user-wz5fn9mu2q 4 жыл бұрын
@@user-qp3xs4jj5p авиа
@LenTos1337
@LenTos1337 6 жыл бұрын
Как всегда спасибо за уроки. Для тех кто не понял фишку с тем, зачем нужно возвращать ссылку на объект. Уравнение с = b = a в оригинале выглядит так: c.operator=(b.operator=(a)); то есть, сначала в объект b мы присваиваем объект a, и чтобы мы могли присвоить сразу же в объект c наш объект b, наша функция присваивания a в b должна вернуть ссылку на этот объект b, потому что оператор присваивания c не может работать с функцией оператора присваивания a в b, если эта функция не возвращает необходимую ссылку на объект b. Сам пытался додуматься очень долго, для тех, кто не понял, попробуйте прочитать моё объяснение, может поймете лучше.
@theomi8633
@theomi8633 6 жыл бұрын
Ну да всё так. Оператор = принимает ссылку на объект, а возвращает void, а надо чтобы возвращал тоже ссылку на такой же объект. На самом деле вернуть надо не ссылку, а объект или объект по ссылке.
@user-dq2cj6ge2c
@user-dq2cj6ge2c 5 жыл бұрын
Спасибо!, теперь понял более подробно.
@doge8633
@doge8633 5 жыл бұрын
Может я тупой, но я не понял. Много букаф
@DenisBilurka
@DenisBilurka 5 жыл бұрын
@@doge8633 Жиза
@alexandrprodan8794
@alexandrprodan8794 4 жыл бұрын
Слава Богу, заглянул в комменты, а то еще бы день провозился.Спасибо!
@lennoxmacduff2037
@lennoxmacduff2037 6 жыл бұрын
Потрясающие уроки Жонглировать объектами и конструкторами гораздо сложнее чем в java Но, чёрт возьми, это же ОФИГЕННО Чём больше язык предоставляет способов прострелить себе ногу - тем он круче и мощнее
@vitusink6445
@vitusink6445 4 жыл бұрын
Тебе хорошо зайдет ассемблер :) Резвись наслаждайся :) А понимаю почему люди придумывают все более высокие по уровню языки...
@borisshalabanov4620
@borisshalabanov4620 6 жыл бұрын
ты просто машина, я тут как улитка сижу и въежаю, спасибо за уроки
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Пожалуйста!
@sabatr1989
@sabatr1989 6 жыл бұрын
то чувство теплоты в черепной коробке, свидетельствующей о перегреве мозга...но снова на третий раз "зашло всё" до каждого символа! Спасибо.
@nurbolatnurguatov2407
@nurbolatnurguatov2407 6 жыл бұрын
Artem Kuleshov ты меня смотивировал я думал я один такой с первого раза не вьезжаю мол значит не мое это и я туп, думал на 82 83 остановиться бросить, думал у всех идет по маслу, один урок за др, оказ надо пересмотреть, если не 2раза так еще, значит я один из вас, попробую заново
@Wardriving666
@Wardriving666 4 жыл бұрын
@@nurbolatnurguatov2407 Ты не один такой=)
@vitusink6445
@vitusink6445 4 жыл бұрын
@@Wardriving666 Конечно не один, Сережа мощно буксанул с обьяснениями как только добрался до чего то сложного. Любитель, что вы хотите?! Но хорошо что хоть такой есть. Часто любитель работает лучше не мотивированного профессионала
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 4 жыл бұрын
@@nurbolatnurguatov2407 До какого урока дошел, или прошел все? Я не однократно сдавался на каком-то этапе, теряя нить понимания.
@MetaLMaDneSS1
@MetaLMaDneSS1 6 жыл бұрын
только Бьёрн Страуструп понял этот урок ))
@user-ny4zk7gj7n
@user-ny4zk7gj7n 4 ай бұрын
до какого-то момента мне удавалось проходить и усваивать 2-3 урока за день, а теперь трешак начался - на 82 урок почти 3 дня🤯🤯🤯, но я пока не сдаюсь. Огромная благодарность Сергею, что может донести инфу даже такому тугодуму - как я😎
@Magomedrasul7
@Magomedrasul7 6 жыл бұрын
Было тяжко понять урок, бросил все, пошел гулять, чуть позже вернулся, посмотрел и понял все )). Чем дальше тем сложнее, так кажется, на самом деле иногда надо просто отвлечься/отдохнуть.
@Kokurorokuko
@Kokurorokuko 4 жыл бұрын
да, согласен
@George_Ryazantsev
@George_Ryazantsev 2 жыл бұрын
спасибо, согласен полностю
@movich9161
@movich9161 2 жыл бұрын
Жиза. Только у меня сначала возникает желание умереть, потом приходит осознание, что прошла неделя и уже потом принятие
@user-lt1iz1kg4c
@user-lt1iz1kg4c 10 ай бұрын
мне это далось гораздо легче конструктора копирования
@urrbanskiy
@urrbanskiy 4 ай бұрын
отдых - тоже часть работы
@whhhhitee
@whhhhitee 6 жыл бұрын
Все видео более информативные и понятные, чем наши лекции в университете. Большое спасибо!
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Пожалуйста!
@VolodymyrChe
@VolodymyrChe 3 жыл бұрын
Все бы препады так же доходчиво объясняли! На паре часто фиг поймёшь, что зачем и почему. После твоих уроков, всё расставляется по полочкам!
@maksimshekhunov4079
@maksimshekhunov4079 6 жыл бұрын
Спасибо, что ты есть
@user-uv8zx6lk2c
@user-uv8zx6lk2c 6 жыл бұрын
Большое спасибо за уроки! Все на высшем уровне.
@user-ho7db5oz8d
@user-ho7db5oz8d 3 жыл бұрын
у нас в универе этот материал неделю объясняют и то супер коряво и большинство просто зубрят не понимая что делают, здесь хватило 2 раза пересмотреть и вроде бы понятно все. огромное спасибо за труды, интернет будет тебя помнить долго!
@janaschelle8377
@janaschelle8377 5 жыл бұрын
Очень хорошие уроки, понятным языком! Большое спасибо!
@ivan100kg
@ivan100kg 3 жыл бұрын
Спасибо за разъяснение отличий конструктора копирования и оператора присваивания!
@Ermine882
@Ermine882 6 жыл бұрын
Спасибо за урок.
@igorfrolov6246
@igorfrolov6246 2 жыл бұрын
Спасибо тебе! Годы идут, а материал по-прежнему очень полезен, нигде не встречал более понятного объяснения!!!
@lexcarpenter69
@lexcarpenter69 3 жыл бұрын
Это такое удовольствие понимать, что происходит. Спасибо за уроки
@archiechellaut9483
@archiechellaut9483 2 жыл бұрын
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
#перегрузкаоператоров #ООП #SimpleCode #урокипрограммирования
@elvinaustin1022
@elvinaustin1022 5 жыл бұрын
Все понял , после пред идущего урока , этот урок сразу отлично понял , спасибо Серега за тщательное разъяснение.
@vnaqr
@vnaqr 5 жыл бұрын
a равно, к примеру 5. а = 2. Лайк однозначно)))
@Alex_Suvorov
@Alex_Suvorov 3 ай бұрын
Спасибо за уроки!! После предыдущего было очень просто, весь код практически смог сам написать, ставя на паузу, только с if не додумался)
@AV1ch
@AV1ch 3 жыл бұрын
Тут в начале, на 3:00, есть большая неточность. Автор говорит «объект А будет думать, что он объект Б». (по описанию похоже на работу указателей, и это запутывает) Правильно: ОТДЕЛЬНЫЕ ПОЛЯ в объекте А, которые являются указателями, получат те же адреса которые в этих же полях-указателях в объекте Б. Объекты классов - это самостоятельные единицы, у каждого объекта свои поля. Не может быть один объект порван между двумя разными переменными. Бывают &ссылки , но ссылка - это дополнительное имя переменной, а не собственно переменная. Если присвоить один объект другому: а = б; //и если они одного класса , то 1) указатели в «а» получат те же адреса, что указатели в «б» 2) остальные поля в «а» получат те же значения, что эти же поля в «б» По причине 1) вот здесь 4:52 показываются одинаковые адреса. Среда показывает адрес указателя *data , который содержится в каждом объекте. (Почему показывается именно он? Потому что он - самый первый в каждом объекте. Среда берёт ближайшее к началу поле в объекте, и в данном случае это поле - указатель *data.) Это называют «поверхностное копирование» (shallow copy), то есть когда оператор присваивания или конструктор копирования даёт указателям адрес на ту же память, что и в исходном объекте. В Си++ в классах оператор присваивания и конструктор копирования по умолчанию работают так (если их не переопределить). «Глубокое копирование» (deep copy) - это когда оператор присваивания или конструктор копирования выделяет новую память. То есть если в исходном объекте есть указатель на память, выделенную через "new", то оператор присваивания или конструктор копирования выделяет новую память для указателя в том объекте, куда копируются данные из исходного объекта.
@Tolyan97kartofan
@Tolyan97kartofan 2 жыл бұрын
Спасибо, что расписал это, братан! Тоже смутило это, уже собирался проект собирать свой и проверять
@user-md2zn1zj6b
@user-md2zn1zj6b Жыл бұрын
спасибо а то и вправду запутало
@gfhitdxaahn
@gfhitdxaahn Жыл бұрын
Да храни тебя араб в подвале! Выручил
@misha2993
@misha2993 Жыл бұрын
Нихрена не понял, но понял, что автор что-то напутал
@AV1ch
@AV1ch Жыл бұрын
@@misha2993 Другими словами. Автор говорит «объект А будет думать, что он объект Б». Правильно: ОТДЕЛЬНЫЕ ПОЛЯ в объекте А, которые являются указателями, получат те же адреса которые в этих же полях в объекте Б.
@nap0le0nb0naparte7
@nap0le0nb0naparte7 6 жыл бұрын
немного сложно,но интересно! Спасибо за урок!!!
@flepjack
@flepjack 3 жыл бұрын
Как ни странно, понял с первого раза) спасибо за предыдущий урок)
@onlyrock1351
@onlyrock1351 3 жыл бұрын
Спасибо, всё просто и интересно!
@nightgames3158
@nightgames3158 2 жыл бұрын
Это уже второй урок который я с первого раза не понимаю...Ну ничего,раза два ещё посмотрю и точно пойму.Спасибо вам:)
@Evgeny..
@Evgeny.. 3 жыл бұрын
Спасибо за уроки!!!!!!!
@vskavronskyi
@vskavronskyi 2 жыл бұрын
Весьма хорошая подача материала, Вы большой молодец!
@DenKof81
@DenKof81 5 жыл бұрын
Спасибо за урок!
@CoolbitsVDA
@CoolbitsVDA Жыл бұрын
Очень спасибо Сергею за прекрасные уроки! Вдвойне приятно, что поставив видео на паузу где-то посередине, я понял , что смогу перегрузить оператор сам и сделал это.
@Empty_line
@Empty_line 10 ай бұрын
Привет, почему у конструктора и оператора адреса похожи? 18:15
@user-uv4bl1jb6z
@user-uv4bl1jb6z 4 жыл бұрын
я рад тому что вы есть этот и прошлый урок я смотрел 5 раз и едва смог его осилить спасибо вам от простого школьника
@Newsvan1
@Newsvan1 5 жыл бұрын
Всё очень понятно и подробно расписано. Большое спасибо!
@8lxckcxt
@8lxckcxt 3 жыл бұрын
Спасибо! идём дальше
@user-gl7pe3io7p
@user-gl7pe3io7p 3 жыл бұрын
Сложно, но я понял. Спасибо больше, а то в универе пробежались быстро ничего не понятно объяснять не хотят. Ну и как обычно коммент для продвижения
@ylikitishnik1946
@ylikitishnik1946 3 жыл бұрын
со второй попытки понял спасибо за урок
@user-ci2ku2oo5u
@user-ci2ku2oo5u 6 жыл бұрын
Спасибо за урок)) Очень не хватает задач! Я лучше усваиваю материал когда записываю информацию или работаю на практике(как и многие, наверно), поэтому пока нет задач я каждый сложный урок конспектирую.)))
@user-uz8mj8vo2y
@user-uz8mj8vo2y 6 жыл бұрын
Могу тебе свои лабораторки скидывать
@lejouet2183
@lejouet2183 6 жыл бұрын
Бро, мне тоже скинь лабы. Заранее спасибо)
@user-ll5dg6zm8d
@user-ll5dg6zm8d 2 жыл бұрын
@@user-uz8mj8vo2y Братан,скинь пж
@dikii45
@dikii45 2 жыл бұрын
@@user-ll5dg6zm8d спустя 3 года)))) ну если скинут то и мне скинь)
@CoolbitsVDA
@CoolbitsVDA Жыл бұрын
@@user-uz8mj8vo2y Спустя 4 года (кто больше?) И мне скинь плиз!!!
@naikvitlich1093
@naikvitlich1093 5 жыл бұрын
Круто!
@morskoy_ezhik
@morskoy_ezhik 10 ай бұрын
Сколько уже смотрю уроки на этом канале, и только сейчас заметил, что на фоне играет жесткий рок)
@alexdomanskyi7301
@alexdomanskyi7301 Жыл бұрын
Круто и наглядно сделано! Правильная подача для новичкои. Проблема многих книг - это завышенная сложность синтаксиса сбивающая новичков.
@Empty_line
@Empty_line 10 ай бұрын
Привет, почему у конструктора и оператора адреса похожи? 18:15
@user-op9hg1kr2b
@user-op9hg1kr2b 3 жыл бұрын
Спасибо!
@user-fp6pe4ne1q
@user-fp6pe4ne1q 7 ай бұрын
Красава!
@Anton-og1wm
@Anton-og1wm Жыл бұрын
Братан, Это очень круто!!!!
@nicivanov5135
@nicivanov5135 3 жыл бұрын
В этом случае все понятно описано. Но есть масса других случаев и операторов, со своей спецификой перегрузки. Нужно больше примеров по этой теме, перегрузки.
@user-pe6yl5rg4d
@user-pe6yl5rg4d 4 ай бұрын
спасибо)
@panschindler9370
@panschindler9370 4 жыл бұрын
Сурс урока. Может кому надо будет... #include #include using namespace std; class Point { private: int x; int y; public: Point() { x = 0; y = 0; cout
@C2H5OHH
@C2H5OHH 2 жыл бұрын
Спасибо большое!
@ivanviktorovitch1961
@ivanviktorovitch1961 2 жыл бұрын
+++
@user-md2zn1zj6b
@user-md2zn1zj6b Жыл бұрын
спасибо
@misha2993
@misha2993 Жыл бұрын
+
@Nikitasept
@Nikitasept 10 ай бұрын
святой человек
@user-yw9bq1pt9v
@user-yw9bq1pt9v 11 ай бұрын
Спасибо тебе !!!
@isolaneed2445
@isolaneed2445 11 ай бұрын
Привет
@Hunve
@Hunve Жыл бұрын
Когда смотрю твои уроки чувствую себя рекурсивной функцией, потому что ,когда ты говоришь мы это проходили в прошлом уроке я сразу на прошлый урок переключаюсь, а там я ничего не понимаю, слышу ту же фразу и также переключаюсь на прошлый урок и так получается рекурсия.
@viper_0097
@viper_0097 5 ай бұрын
А потом переполнение стека...
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
Это не рекурсия, это просто реверс
@glebskachko1811
@glebskachko1811 5 жыл бұрын
Невероятно спокойно и доходчиво. Курс ООП с универа за месяц у тебя прошёл за 10 часов :)
@VIONICK08
@VIONICK08 5 жыл бұрын
не одно и то же?
@user-qz9yi5hj3s
@user-qz9yi5hj3s 6 жыл бұрын
Спасибо земеля! Очень нужные уроки, я надеюсь. Был бы кто-то другой на твоём месте, то давно бы уже бросил изучать. На самом деле мозг уже отключается для восприятия информации. Испробовал методы заставить мозг работать,-гуляние на свежем воздухе, кофе, физ.зарядка, но чувствую пропадает желание к обучению. Какие способы себя заставить можете посоветовать, -ведь нежелательно делать большой перерыв, так как можно забыть чему научился.
@Slime191
@Slime191 6 жыл бұрын
Лучший способ заставить себя учиться- Желание. А если его нет, то ищи способы его культивировать. Я смотрел разные фильмы, музыку, искал плюсы в чём-то и втягивался. В итоге, когда желание есть ,можно шпрехать не на голом энтузиазме и силе воли, а на нескончаемом генераторе энергии- Желании)
@user-kb6qd8rg4g
@user-kb6qd8rg4g 4 жыл бұрын
спасибо
@user-bh9nl1xu6d
@user-bh9nl1xu6d Жыл бұрын
лучший из лучших
@Empty_line
@Empty_line 10 ай бұрын
Привет, почему у конструктора и оператора адреса похожи? 18:15
@user-ur3mc6hb5d
@user-ur3mc6hb5d 11 ай бұрын
как раз до этого урока гуглил как сделать свои операторы, а то в питоне такое можно сделать, значит и тут можно. Наконец-то я до этого дошел)
@frosten5746
@frosten5746 11 ай бұрын
И какая понял что к чему?
@user-ur3mc6hb5d
@user-ur3mc6hb5d 11 ай бұрын
@@frosten5746 да
@user-ol9es1ch9x
@user-ol9es1ch9x Жыл бұрын
привет из 2023, спасибо большое за уроки!
@bulba1995
@bulba1995 2 жыл бұрын
Да тут я поплыл ,вроде как все понял но не точно. Спасибо
@zubrailx6416
@zubrailx6416 3 жыл бұрын
Останавливаюсь тут, основные моменты языка вроде как понял, а пока пойду на пайтон. Конечно, не собираюсь бросать этот язык, просто немного огонек подсбавлю, 15 видео в день по-моему многовато, буду 1-2 усваивать. :) А пока на фриланс!)
@alexgaran5339
@alexgaran5339 3 жыл бұрын
Я уже месяца 3 по одному видео смотрю. Так легче усваивать. Все не запомнишь.
@romkagm7756
@romkagm7756 3 жыл бұрын
Чихнул когда сказал что его зовут Сергей - значит правда =)
@etniqa3638
@etniqa3638 5 жыл бұрын
вечный курс
@user-ye7vc6ug1l
@user-ye7vc6ug1l 5 жыл бұрын
Спсб
@Nito4kin
@Nito4kin 4 жыл бұрын
10/10
@vovadenys4149
@vovadenys4149 4 жыл бұрын
нравится
@user-np1hh3pt7y
@user-np1hh3pt7y 5 жыл бұрын
єто как в сказке Алиса В Стране Чудес - кролик откусил сам себе свою же голову :-)
@666towelie
@666towelie 4 жыл бұрын
Спасибо за урок! Не понял только зачем делать проверку указателя data на nullptr, ведь ничего не произойдет если мы вызовем delete указателя, указывающего на nullptr?
@ARproj
@ARproj 6 жыл бұрын
попробую угадать досмотрев до 10:16 что должен возвращать указатель на то куда присваиваем :)
@zzz-vl7ju
@zzz-vl7ju 3 жыл бұрын
Спасибо! Я даже понял почему мы ссылку возвращаем ! Очень круто . Спасибо вам огромное .(Вопрос)Мы можем с помощью delete удалить данные из статической памяти ?
@aviator1472
@aviator1472 Жыл бұрын
И почему мы возвращаем ссылку? Для чего вообще нам эта ссылка если мы возвращаем *this тоесть тот же объект..
@RrRrRrRroman
@RrRrRrRroman Жыл бұрын
Блин, весь урок понимал-понимал, в последние 3 минуты всё сломалось)))
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
Ёкарный бабай, тоже самое, но я сонный ночью посмотрел
@outcast-cr5yy
@outcast-cr5yy 5 жыл бұрын
Черт) сложновато. Но все равно спасибо.
@topervidos3640
@topervidos3640 4 жыл бұрын
Обращение к автору. Объект a не будет думать, что он объект b. Потому что, присваивание идёт только по значению, а адреса у обеих переменных, разные так и остаются как и были изначально. Посмотрите, что вы преподаёте с 4 м. 20 сек. ролика.
@Hippan_
@Hippan_ 4 жыл бұрын
правильно говоришь по значению...все верно, только эти значения адреса объектов...адреса у a и b останутся разные но если значения их станут равны ссылаться они будут уже на один объект...
@GamerGuyMen
@GamerGuyMen 4 жыл бұрын
Я так полагаю, что мы возвращаем значение из-за того, что в итоге при присваивании объекта b к c оператор у нас не будет перегружен, если не вернется ссылка на объект
@velichkina_masha
@velichkina_masha 2 жыл бұрын
Здравствуйте!Подскажите,пожалуйста,оператор присваивания и оператор копирующего присваивания это одно и то же?
@alexanderzaretskiy4188
@alexanderzaretskiy4188 3 жыл бұрын
Проверка на delete nullptr не нужна, т.к. delete в этом случае не предпримет никаких действий. А вот проверить на случай: MyClass A; A = A; вполне стоит, без проверки присвоения самого себе произойдет неприятная ситуация потери данных...
@TokiuDoki
@TokiuDoki 4 жыл бұрын
Обязательно возвращать именно ссылку?
@user-sx4se9sd5c
@user-sx4se9sd5c 4 жыл бұрын
Может кто то к примеру сказать где это используется, а то уже нить потерял зачем она используется, тока надо пример из реальной жизни, что писать чтобы работало понятно, нужен просто пример
@mvoo2340
@mvoo2340 10 ай бұрын
А если при присваивании объектов друг другу всё равно им присваиваются разные адреса даже без перегрузки оператора, это новые версии компилятора или Visual Studio 17 так делает?
@apchike-masala
@apchike-masala 3 жыл бұрын
я понял что делает конструктор копирования. я понял зачем он копирует объект при передачи его в функцию(потому что передаём его по значению) Я НЕ понял зачем он вызывается при возврате объекта из функции. Зачем создаётся временный объект для хранения полей возвращаемого объекта? объясните пожалуйста!!
@almatytelecom1
@almatytelecom1 2 жыл бұрын
потому что передача параметров в функцию и обратно из нее производится по значению(в обычном случае без использования указателей и ссылок). А понятие по значение и есть копирование.
@lllZarakilll
@lllZarakilll 7 ай бұрын
Понял суть, деталицазцию под капотом не всю. Меня терзает только один вопрос - Зачем все это нужно? Практическое применение, жаль что не приводятся примеры этого.
@forixsins
@forixsins 7 ай бұрын
Удобство, но это если умеренно применять. В перегрузках с выделением памяти вообще специфика жëсткая, это скорее для прошареных тема
@Viamsupervadetvadens
@Viamsupervadetvadens 6 жыл бұрын
up
@eninyri
@eninyri 4 жыл бұрын
привет. только ты не рассказал почему вызывается конструктор копирования после команды return *this ! давай раз уже начал!
@almatytelecom1
@almatytelecom1 2 жыл бұрын
потому что передача в функцию и возврат из нее в обычном случае происходит по значению. И при передаче по значению происходит копирование из внешних переменных во внутренние, и наоборот при выходе из функции копирование из внутренних во внешние. p.s.( под обычным случаем я понимаю вызов функции без использования указателей и ссылок)
@user-ci8fx2zy4b
@user-ci8fx2zy4b 3 жыл бұрын
то есть, как я понимаю мы перегрузили оператор равно так, чтобы он выполнял функцию конструктора копирования?
@Kokurorokuko
@Kokurorokuko 3 жыл бұрын
Я не совсем понимаю, почему мы возвращаем ссылку на объект, а не сам объект. Объясню что я имею в виду. Когда мы присваиваем объект a в объект b оператором b = a; мы фактически вызываем функцию b.operator=(a); То есть мы в качестве аргумента используем САМ ОБЪЕКТ а. А уж в самой функции используется его ссылка с помощью оператора &. Это понятно. Но если мы вернём из функции ссылку на объект b, то функция c = b будет принимать не САМ ОБЪЕКТ b, а ссылку на него. И в функции будет использоваться ссылка на ссылку. Разве не так? Пример (упрощенный, но с той же идеей): int& Foo(int value) { return value; } // функция возвращает просто ссылку тогда почему же в main мы МОЖЕМ написать так: int a = 2; int b; b = Foo2(a); Как это так мы в b присваиваем ссылку на a, если b типа int, а не int* ?
@Kokurorokuko
@Kokurorokuko 3 жыл бұрын
Я не уверен, что до конца понял, но попробую объяснить это на том уровне, на котором всё-таки дошло. Если вспомнить урок про ссылки, то там говорилось, что ссылочный тип не требует разыменования. Соответственно, написать b = Foo2(a); это то же самое, что и написать int& c = Foo2(a); b = c; В последней строчке мы хоть и работаем с ссылкой, но никаких операторов к ней не применяем. Т.к. запись "c" уже подразумевает только значение, лежащее по этому адресу. Так и в примере с объектами. Мы возвращаем ссылку на объект b после первой операции присваивания, а потом уже эта ссылка, как результат функции, никаких операторов разыменования не требует, поэтому мы спокойно используем её в функции. Хотя всё-равно получается в функции ссылка на ссылку, но это, я так понимаю, нормально. Кстати, объяснять что-то кому-то другому бывает полезно для собственного понимания вопроса.
@almatytelecom1
@almatytelecom1 2 жыл бұрын
изучи конкретно , что такое ссылка и ты поймешь.
@aviator1472
@aviator1472 Жыл бұрын
​@@almatytelecom1 я изучил и все равно не понимаю почему у автора в конце Myclass & operator= вместо просто Myclass operator=? Мы же все равно возвращаем САМ объект *this...
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
@@aviator1472 да дурдом тут какой-то
@SAF0001_RU
@SAF0001_RU 3 жыл бұрын
Проще наверно не копировать объект в объект, дабы не парится с перегрузкой методов копирования и присваивания. А то сегодня это один объект, завтра другой, а про то что надо внести изменения еще куда-то никто потом и не вспомнит.
@michaelivanov1605
@michaelivanov1605 4 жыл бұрын
Я не понимаю когда мы перегружаем классы, то вводя параметры 10, 2, 5 и т.д они подходят под все перегрузки и по этому всё выводится на экран? А a = b и c = a = b это просто примеры как это выглядит?
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
c.operator=(a.operator=(b)); Вот, наконец понял Когда для "c" вызывается перегруженный оператор, мы передаём в его аргументы "a", который в свою очередь должен сначала отработать свою перегруженную функцию и вернуть свой результат работы, поэтому он возвращает в "c" - "return *this;"(себя)
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 4 жыл бұрын
Хочу добавить один момент, который может быть не очевиден. Рассмотрим работу оператора присваивания ПОСЛЕ того, как Сергей дополнил его возвращаемым значением *this 1) Когда выполняется инструкция a = b; значение *this возвращается, но НЕ ИСПОЛЬЗУЕТСЯ. 2) Когда выполняется инструкция c=a=b; - значение *this возвращается в первом присвоении, но НЕ используется, но, используется во втором присвоении, чтоб присвоить резльтат переменной с. Для более простого понимания можно написать так: с=(a=b). Не понимаю почему так, но так. Наверно я что-то паропустил в самом начале.
@almatytelecom1
@almatytelecom1 2 жыл бұрын
так потому что есть понятие ассоциативность операторов(из математики). Ассоциативность бывает справа-налево или слева-направо.
@nikitasuyazov2060
@nikitasuyazov2060 29 күн бұрын
Вот этот конструктор "MyClass(const MyClass &other)" так выносит мозг наличием ссылки &other. Вроде всё знакомо, но в целом почему после вызова "MyClass b = a;" идёт 2 перегрузка сложно.
@sleepyNovember_project
@sleepyNovember_project 29 күн бұрын
Внимательнее смотреть и слушать надо
@nikitasuyazov2060
@nikitasuyazov2060 29 күн бұрын
@@sleepyNovember_project это очевидно. Но не только.
@sleepyNovember_project
@sleepyNovember_project 28 күн бұрын
​@@nikitasuyazov2060 ну как, уже понял? :)
@TheZandrey
@TheZandrey 6 жыл бұрын
думаю еще надо учесть момент a = a;
@faustomendez6567
@faustomendez6567 6 жыл бұрын
this в помощь
@wasony.126
@wasony.126 4 жыл бұрын
@@faustomendez6567 хорош
@aviator1472
@aviator1472 Жыл бұрын
​@@faustomendez6567 а причем тут this?
@movich9161
@movich9161 2 жыл бұрын
0:30 прошлые 100 уроков?))
@dangerous2627
@dangerous2627 7 ай бұрын
У меня перегрузка мозгов
@maksinima
@maksinima 5 жыл бұрын
Спасибо вам за ваши уроки. Но я столкнулся с проблемой. Я переписываю ваш код в другом IDE и в нём нельзя сворачивать строчки, как это делаете вы. И что бы файл не был слишком большим, я разбиваю всё на cpp и h. Столкнулся с проблемой, что строчку "MyClass & operator = (const MyClass &other)" в cpp не воспринимает из h. Ведь получается что "MyClass" это тип данных. Как заставить компилятор увидеть его? Я пытался писать "MyClass::MyClass & operator...", это не помогло.
@maksinima
@maksinima 5 жыл бұрын
Если кто совершил такую же глупую ошибку как и я, то нужно было писать "MyClass & MyClass::operator = (const MyClass &other)" Всё работает в итоге.
@kaynsolo
@kaynsolo 6 жыл бұрын
А что если мне нужно будет переинициализировать объект "a" второй раз? Сработает конструктор класса и мы получим утечку?
@panda9303
@panda9303 4 жыл бұрын
Конструктор срабатывает один раз при создании экземпляра класса. Затем ты можешь присвоить отдельным паблик полям новые значения (тут нет никакого конструктора), ну либо же присвоить новый объект. Как раз для этого мы и перегрузили оператор присваивания.
@yoqo
@yoqo 4 жыл бұрын
4:19 Не очень понял, почему так. Если мы присваиваем одному объекту другой, то копируются только значения полей. По крайней мере, "this" у них отличаются, и, меняя одно из полей в копии, не меняется поле в оригинале. Так почему же объект "a" начинает думать, что он и есть объект "b"?
@andreyvolkov3117
@andreyvolkov3117 4 жыл бұрын
Я понял (я не уверен), что это из-за работы с динамической памятью, т.к. data в private имеет указатель(*). И формально, мы передаём данные по данному указателю (ну, другое само собой придётся тоже делать под такой тип, чтобы работало, я про всё в классе)
@almatytelecom1
@almatytelecom1 2 жыл бұрын
потому что ты указатели присваиваешь друг другу. И указатели становятся одинаковыми, т.е. начинают указывать на одну и ту же память.
@matweymishenko2811
@matweymishenko2811 6 жыл бұрын
Было бы уместное перед тем как начинать удалять массив проверять что other!= this
@voltamper96
@voltamper96 5 жыл бұрын
да если a = a;
@TheAadikova
@TheAadikova 5 жыл бұрын
На удвоенной скорости смотреть нужно, проще понимается
@user-qx2kl6wr1p
@user-qx2kl6wr1p 4 жыл бұрын
А как тогда поступить, если мы создаем объект класса в динамической памяти, то есть, допустим, у нас класс, содержащий одно поле - имя, мы создадим два объекта, в классе реализуем перегрузку оператора присвоения, присвоим и как дальше? Как очистить область памяти? MyName* person_1 = new MyName(); MyName* person_2 = new MyName("Nik"); person_1 = person_2; delete person_2; delete person_1; //реализация перегрузки оператора присвоения: MyName& operator = (const MyName& other) { cout
@svvonline1
@svvonline1 6 ай бұрын
У Вас произойдет утечка пямяти и программа вылетит с ошибкой. Вы один и то же объект удалаяте два раза. Никакой оператор присваивания у Вас вызываться не будет. Вы просто прсвоили одному указателю значение другого указателя. Нужно: *person_1 = *person_2;
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
@@svvonline1 Это понятно. Но вопрос то был о другом...
@user-md5ej9sl8w
@user-md5ej9sl8w 2 жыл бұрын
Подскажите, какой комбинацией клавиш можно быстро закомментировать код, как на видео в момент 6:47
@RayTracingX
@RayTracingX 9 ай бұрын
Узнали? Можно мне тоже узнать?
@sleepyNovember_project
@sleepyNovember_project 5 ай бұрын
@@RayTracingX не актуально?
@tsohee9145
@tsohee9145 5 жыл бұрын
В 145 строке наверно можно уже писать не "other.Size", а просто "Size"? 19:38
@user-qm4or3bt4v
@user-qm4or3bt4v 3 жыл бұрын
Угу
@1mpalo362
@1mpalo362 Жыл бұрын
Вместо ручного копирования можно было использовать функцию std::copy()
@temshik.invalid
@temshik.invalid 3 жыл бұрын
22:50
3 wheeler new bike fitting
00:19
Ruhul Shorts
Рет қаралды 49 МЛН
Khóa ly biệt
01:00
Đào Nguyễn Ánh - Hữu Hưng
Рет қаралды 20 МЛН
Climbing to 18M Subscribers 🎉
00:32
Matt Larose
Рет қаралды 35 МЛН
Всё об указателях в C++ за 20 минут
20:00
Аналитическая записка НАТО о советском образовании
39:54
Алексей Савватеев. Родная Школа.
Рет қаралды 25 М.
3 wheeler new bike fitting
00:19
Ruhul Shorts
Рет қаралды 49 МЛН