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

  Переглядів 267,976

#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

КОМЕНТАРІ: 270
@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 3 роки тому
@@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 5 років тому
Ну да всё так. Оператор = принимает ссылку на объект, а возвращает void, а надо чтобы возвращал тоже ссылку на такой же объект. На самом деле вернуть надо не ссылку, а объект или объект по ссылке.
@user-dq2cj6ge2c
@user-dq2cj6ge2c 5 років тому
Спасибо!, теперь понял более подробно.
@doge8633
@doge8633 5 років тому
Может я тупой, но я не понял. Много букаф
@DenisBil
@DenisBil 4 роки тому
@@doge8633 Жиза
@alexandrprodan8794
@alexandrprodan8794 4 роки тому
Слава Богу, заглянул в комменты, а то еще бы день провозился.Спасибо!
@borisshalabanov4620
@borisshalabanov4620 6 років тому
ты просто машина, я тут как улитка сижу и въежаю, спасибо за уроки
@SimpleCodeIT
@SimpleCodeIT 6 років тому
Пожалуйста!
@MetaLMaDneSS1
@MetaLMaDneSS1 6 років тому
только Бьёрн Страуструп понял этот урок ))
@lennoxmacduff2037
@lennoxmacduff2037 6 років тому
Потрясающие уроки Жонглировать объектами и конструкторами гораздо сложнее чем в java Но, чёрт возьми, это же ОФИГЕННО Чём больше язык предоставляет способов прострелить себе ногу - тем он круче и мощнее
@vitusink6445
@vitusink6445 4 роки тому
Тебе хорошо зайдет ассемблер :) Резвись наслаждайся :) А понимаю почему люди придумывают все более высокие по уровню языки...
@sabatr1989
@sabatr1989 6 років тому
то чувство теплоты в черепной коробке, свидетельствующей о перегреве мозга...но снова на третий раз "зашло всё" до каждого символа! Спасибо.
@nurbolatnurguatov2407
@nurbolatnurguatov2407 6 років тому
Artem Kuleshov ты меня смотивировал я думал я один такой с первого раза не вьезжаю мол значит не мое это и я туп, думал на 82 83 остановиться бросить, думал у всех идет по маслу, один урок за др, оказ надо пересмотреть, если не 2раза так еще, значит я один из вас, попробую заново
@Wardriving666
@Wardriving666 4 роки тому
@@nurbolatnurguatov2407 Ты не один такой=)
@vitusink6445
@vitusink6445 4 роки тому
@@Wardriving666 Конечно не один, Сережа мощно буксанул с обьяснениями как только добрался до чего то сложного. Любитель, что вы хотите?! Но хорошо что хоть такой есть. Часто любитель работает лучше не мотивированного профессионала
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 4 роки тому
@@nurbolatnurguatov2407 До какого урока дошел, или прошел все? Я не однократно сдавался на каком-то этапе, теряя нить понимания.
@Magomedrasul7
@Magomedrasul7 5 років тому
Было тяжко понять урок, бросил все, пошел гулять, чуть позже вернулся, посмотрел и понял все )). Чем дальше тем сложнее, так кажется, на самом деле иногда надо просто отвлечься/отдохнуть.
@Kokurorokuko
@Kokurorokuko 4 роки тому
да, согласен
@George_Ryazantsev
@George_Ryazantsev 2 роки тому
спасибо, согласен полностю
@movich9161
@movich9161 Рік тому
Жиза. Только у меня сначала возникает желание умереть, потом приходит осознание, что прошла неделя и уже потом принятие
@user-lt1iz1kg4c
@user-lt1iz1kg4c 9 місяців тому
мне это далось гораздо легче конструктора копирования
@urrbanskiy
@urrbanskiy 2 місяці тому
отдых - тоже часть работы
@whhhhitee
@whhhhitee 6 років тому
Все видео более информативные и понятные, чем наши лекции в университете. Большое спасибо!
@SimpleCodeIT
@SimpleCodeIT 6 років тому
Пожалуйста!
@user-uv8zx6lk2c
@user-uv8zx6lk2c 6 років тому
Большое спасибо за уроки! Все на высшем уровне.
@ivan100kg
@ivan100kg 3 роки тому
Спасибо за разъяснение отличий конструктора копирования и оператора присваивания!
@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 Другими словами. Автор говорит «объект А будет думать, что он объект Б». Правильно: ОТДЕЛЬНЫЕ ПОЛЯ в объекте А, которые являются указателями, получат те же адреса которые в этих же полях в объекте Б.
@janaschelle8377
@janaschelle8377 4 роки тому
Очень хорошие уроки, понятным языком! Большое спасибо!
@lexcarpenter69
@lexcarpenter69 3 роки тому
Это такое удовольствие понимать, что происходит. Спасибо за уроки
@archiechellaut9483
@archiechellaut9483 2 роки тому
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
@igorfrolov6246
@igorfrolov6246 2 роки тому
Спасибо тебе! Годы идут, а материал по-прежнему очень полезен, нигде не встречал более понятного объяснения!!!
@Ermine882
@Ermine882 6 років тому
Спасибо за урок.
@maksimshekhunov4079
@maksimshekhunov4079 6 років тому
Спасибо, что ты есть
@elvinaustin1022
@elvinaustin1022 5 років тому
Все понял , после пред идущего урока , этот урок сразу отлично понял , спасибо Серега за тщательное разъяснение.
@VolodymyrChe
@VolodymyrChe 3 роки тому
Все бы препады так же доходчиво объясняли! На паре часто фиг поймёшь, что зачем и почему. После твоих уроков, всё расставляется по полочкам!
@Evgeny..
@Evgeny.. 3 роки тому
Спасибо за уроки!!!!!!!
@DenKof81
@DenKof81 5 років тому
Спасибо за урок!
@flepjack
@flepjack 3 роки тому
Как ни странно, понял с первого раза) спасибо за предыдущий урок)
@onlyrock1351
@onlyrock1351 3 роки тому
Спасибо, всё просто и интересно!
@vskavronskyi
@vskavronskyi 2 роки тому
Весьма хорошая подача материала, Вы большой молодец!
@user-ho7db5oz8d
@user-ho7db5oz8d 3 роки тому
у нас в универе этот материал неделю объясняют и то супер коряво и большинство просто зубрят не понимая что делают, здесь хватило 2 раза пересмотреть и вроде бы понятно все. огромное спасибо за труды, интернет будет тебя помнить долго!
@nightgames3158
@nightgames3158 2 роки тому
Это уже второй урок который я с первого раза не понимаю...Ну ничего,раза два ещё посмотрю и точно пойму.Спасибо вам:)
@vnaqr
@vnaqr 5 років тому
a равно, к примеру 5. а = 2. Лайк однозначно)))
@8lxckcxt
@8lxckcxt 3 роки тому
Спасибо! идём дальше
@nap0le0nb0naparte7
@nap0le0nb0naparte7 6 років тому
немного сложно,но интересно! Спасибо за урок!!!
@user-uv4bl1jb6z
@user-uv4bl1jb6z 4 роки тому
я рад тому что вы есть этот и прошлый урок я смотрел 5 раз и едва смог его осилить спасибо вам от простого школьника
@user-fp6pe4ne1q
@user-fp6pe4ne1q 6 місяців тому
Красава!
@Alex_Suvorov
@Alex_Suvorov Місяць тому
Спасибо за уроки!! После предыдущего было очень просто, весь код практически смог сам написать, ставя на паузу, только с if не додумался)
@naikvitlich1093
@naikvitlich1093 5 років тому
Круто!
@CoolbitsVDA
@CoolbitsVDA Рік тому
Очень спасибо Сергею за прекрасные уроки! Вдвойне приятно, что поставив видео на паузу где-то посередине, я понял , что смогу перегрузить оператор сам и сделал это.
@Empty_line
@Empty_line 8 місяців тому
Привет, почему у конструктора и оператора адреса похожи? 18:15
@user-op9hg1kr2b
@user-op9hg1kr2b 3 роки тому
Спасибо!
@ylikitishnik1946
@ylikitishnik1946 2 роки тому
со второй попытки понял спасибо за урок
@Newsvan1
@Newsvan1 4 роки тому
Всё очень понятно и подробно расписано. Большое спасибо!
@Anton-og1wm
@Anton-og1wm Рік тому
Братан, Это очень круто!!!!
@SimpleCodeIT
@SimpleCodeIT 6 років тому
#перегрузкаоператоров #ООП #SimpleCode #урокипрограммирования
@user-pe6yl5rg4d
@user-pe6yl5rg4d 2 місяці тому
спасибо)
@nicivanov5135
@nicivanov5135 3 роки тому
В этом случае все понятно описано. Но есть масса других случаев и операторов, со своей спецификой перегрузки. Нужно больше примеров по этой теме, перегрузки.
@user-ny4zk7gj7n
@user-ny4zk7gj7n 2 місяці тому
до какого-то момента мне удавалось проходить и усваивать 2-3 урока за день, а теперь трешак начался - на 82 урок почти 3 дня🤯🤯🤯, но я пока не сдаюсь. Огромная благодарность Сергею, что может донести инфу даже такому тугодуму - как я😎
@user-gl7pe3io7p
@user-gl7pe3io7p 3 роки тому
Сложно, но я понял. Спасибо больше, а то в универе пробежались быстро ничего не понятно объяснять не хотят. Ну и как обычно коммент для продвижения
@user-yw9bq1pt9v
@user-yw9bq1pt9v 9 місяців тому
Спасибо тебе !!!
@isolaneed2445
@isolaneed2445 9 місяців тому
Привет
@user-kb6qd8rg4g
@user-kb6qd8rg4g 4 роки тому
спасибо
@morskoy_ezhik
@morskoy_ezhik 9 місяців тому
Сколько уже смотрю уроки на этом канале, и только сейчас заметил, что на фоне играет жесткий рок)
@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 8 місяців тому
святой человек
@user-ci2ku2oo5u
@user-ci2ku2oo5u 6 років тому
Спасибо за урок)) Очень не хватает задач! Я лучше усваиваю материал когда записываю информацию или работаю на практике(как и многие, наверно), поэтому пока нет задач я каждый сложный урок конспектирую.)))
@user-uz8mj8vo2y
@user-uz8mj8vo2y 6 років тому
Могу тебе свои лабораторки скидывать
@lejouet2183
@lejouet2183 5 років тому
Бро, мне тоже скинь лабы. Заранее спасибо)
@user-ll5dg6zm8d
@user-ll5dg6zm8d 2 роки тому
@@user-uz8mj8vo2y Братан,скинь пж
@dikii45
@dikii45 2 роки тому
@@user-ll5dg6zm8d спустя 3 года)))) ну если скинут то и мне скинь)
@CoolbitsVDA
@CoolbitsVDA Рік тому
@@user-uz8mj8vo2y Спустя 4 года (кто больше?) И мне скинь плиз!!!
@alexdomanskyi7301
@alexdomanskyi7301 Рік тому
Круто и наглядно сделано! Правильная подача для новичкои. Проблема многих книг - это завышенная сложность синтаксиса сбивающая новичков.
@Empty_line
@Empty_line 8 місяців тому
Привет, почему у конструктора и оператора адреса похожи? 18:15
@Nito4kin
@Nito4kin 4 роки тому
10/10
@user-qz9yi5hj3s
@user-qz9yi5hj3s 6 років тому
Спасибо земеля! Очень нужные уроки, я надеюсь. Был бы кто-то другой на твоём месте, то давно бы уже бросил изучать. На самом деле мозг уже отключается для восприятия информации. Испробовал методы заставить мозг работать,-гуляние на свежем воздухе, кофе, физ.зарядка, но чувствую пропадает желание к обучению. Какие способы себя заставить можете посоветовать, -ведь нежелательно делать большой перерыв, так как можно забыть чему научился.
@Slime191
@Slime191 5 років тому
Лучший способ заставить себя учиться- Желание. А если его нет, то ищи способы его культивировать. Я смотрел разные фильмы, музыку, искал плюсы в чём-то и втягивался. В итоге, когда желание есть ,можно шпрехать не на голом энтузиазме и силе воли, а на нескончаемом генераторе энергии- Желании)
@user-ye7vc6ug1l
@user-ye7vc6ug1l 5 років тому
Спсб
@user-ur3mc6hb5d
@user-ur3mc6hb5d 10 місяців тому
как раз до этого урока гуглил как сделать свои операторы, а то в питоне такое можно сделать, значит и тут можно. Наконец-то я до этого дошел)
@frosten5746
@frosten5746 9 місяців тому
И какая понял что к чему?
@user-ur3mc6hb5d
@user-ur3mc6hb5d 9 місяців тому
@@frosten5746 да
@Hunve
@Hunve Рік тому
Когда смотрю твои уроки чувствую себя рекурсивной функцией, потому что ,когда ты говоришь мы это проходили в прошлом уроке я сразу на прошлый урок переключаюсь, а там я ничего не понимаю, слышу ту же фразу и также переключаюсь на прошлый урок и так получается рекурсия.
@viper_0097
@viper_0097 3 місяці тому
А потом переполнение стека...
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
Это не рекурсия, это просто реверс
@user-bh9nl1xu6d
@user-bh9nl1xu6d Рік тому
лучший из лучших
@Empty_line
@Empty_line 8 місяців тому
Привет, почему у конструктора и оператора адреса похожи? 18:15
@etniqa3638
@etniqa3638 5 років тому
вечный курс
@bulba1995
@bulba1995 Рік тому
Да тут я поплыл ,вроде как все понял но не точно. Спасибо
@vovadenys4149
@vovadenys4149 4 роки тому
нравится
@glebskachko1811
@glebskachko1811 5 років тому
Невероятно спокойно и доходчиво. Курс ООП с универа за месяц у тебя прошёл за 10 часов :)
@VIONICK08
@VIONICK08 5 років тому
не одно и то же?
@666towelie
@666towelie 4 роки тому
Спасибо за урок! Не понял только зачем делать проверку указателя data на nullptr, ведь ничего не произойдет если мы вызовем delete указателя, указывающего на nullptr?
@romkagm7756
@romkagm7756 3 роки тому
Чихнул когда сказал что его зовут Сергей - значит правда =)
@mvoo2340
@mvoo2340 8 місяців тому
А если при присваивании объектов друг другу всё равно им присваиваются разные адреса даже без перегрузки оператора, это новые версии компилятора или Visual Studio 17 так делает?
@ARproj
@ARproj 6 років тому
попробую угадать досмотрев до 10:16 что должен возвращать указатель на то куда присваиваем :)
@zubrailx6416
@zubrailx6416 3 роки тому
Останавливаюсь тут, основные моменты языка вроде как понял, а пока пойду на пайтон. Конечно, не собираюсь бросать этот язык, просто немного огонек подсбавлю, 15 видео в день по-моему многовато, буду 1-2 усваивать. :) А пока на фриланс!)
@alexgaran5339
@alexgaran5339 3 роки тому
Я уже месяца 3 по одному видео смотрю. Так легче усваивать. Все не запомнишь.
@user-ol9es1ch9x
@user-ol9es1ch9x Рік тому
привет из 2023, спасибо большое за уроки!
@zzz-vl7ju
@zzz-vl7ju 3 роки тому
Спасибо! Я даже понял почему мы ссылку возвращаем ! Очень круто . Спасибо вам огромное .(Вопрос)Мы можем с помощью delete удалить данные из статической памяти ?
@aviator1472
@aviator1472 10 місяців тому
И почему мы возвращаем ссылку? Для чего вообще нам эта ссылка если мы возвращаем *this тоесть тот же объект..
@outcast-cr5yy
@outcast-cr5yy 5 років тому
Черт) сложновато. Но все равно спасибо.
@TokiuDoki
@TokiuDoki 4 роки тому
Обязательно возвращать именно ссылку?
@user-np1hh3pt7y
@user-np1hh3pt7y 5 років тому
єто как в сказке Алиса В Стране Чудес - кролик откусил сам себе свою же голову :-)
@alexanderzaretskiy4188
@alexanderzaretskiy4188 3 роки тому
Проверка на delete nullptr не нужна, т.к. delete в этом случае не предпримет никаких действий. А вот проверить на случай: MyClass A; A = A; вполне стоит, без проверки присвоения самого себе произойдет неприятная ситуация потери данных...
@velichkina_masha
@velichkina_masha 2 роки тому
Здравствуйте!Подскажите,пожалуйста,оператор присваивания и оператор копирующего присваивания это одно и то же?
@user-sx4se9sd5c
@user-sx4se9sd5c 4 роки тому
Может кто то к примеру сказать где это используется, а то уже нить потерял зачем она используется, тока надо пример из реальной жизни, что писать чтобы работало понятно, нужен просто пример
@Viamsupervadetvadens
@Viamsupervadetvadens 6 років тому
up
@GamerGuyMen
@GamerGuyMen 4 роки тому
Я так полагаю, что мы возвращаем значение из-за того, что в итоге при присваивании объекта b к c оператор у нас не будет перегружен, если не вернется ссылка на объект
@RrRrRrRroman
@RrRrRrRroman 10 місяців тому
Блин, весь урок понимал-понимал, в последние 3 минуты всё сломалось)))
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
Ёкарный бабай, тоже самое, но я сонный ночью посмотрел
@user-ci8fx2zy4b
@user-ci8fx2zy4b 3 роки тому
то есть, как я понимаю мы перегрузили оператор равно так, чтобы он выполнял функцию конструктора копирования?
@apchike-masala
@apchike-masala 3 роки тому
я понял что делает конструктор копирования. я понял зачем он копирует объект при передачи его в функцию(потому что передаём его по значению) Я НЕ понял зачем он вызывается при возврате объекта из функции. Зачем создаётся временный объект для хранения полей возвращаемого объекта? объясните пожалуйста!!
@almatytelecom1
@almatytelecom1 2 роки тому
потому что передача параметров в функцию и обратно из нее производится по значению(в обычном случае без использования указателей и ссылок). А понятие по значение и есть копирование.
@eninyri
@eninyri 4 роки тому
привет. только ты не рассказал почему вызывается конструктор копирования после команды return *this ! давай раз уже начал!
@almatytelecom1
@almatytelecom1 2 роки тому
потому что передача в функцию и возврат из нее в обычном случае происходит по значению. И при передаче по значению происходит копирование из внешних переменных во внутренние, и наоборот при выходе из функции копирование из внутренних во внешние. p.s.( под обычным случаем я понимаю вызов функции без использования указателей и ссылок)
@topervidos3640
@topervidos3640 4 роки тому
Обращение к автору. Объект a не будет думать, что он объект b. Потому что, присваивание идёт только по значению, а адреса у обеих переменных, разные так и остаются как и были изначально. Посмотрите, что вы преподаёте с 4 м. 20 сек. ролика.
@Hippan_
@Hippan_ 4 роки тому
правильно говоришь по значению...все верно, только эти значения адреса объектов...адреса у a и b останутся разные но если значения их станут равны ссылаться они будут уже на один объект...
@user-md5ej9sl8w
@user-md5ej9sl8w 2 роки тому
Подскажите, какой комбинацией клавиш можно быстро закомментировать код, как на видео в момент 6:47
@RayTracingX
@RayTracingX 7 місяців тому
Узнали? Можно мне тоже узнать?
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
@@RayTracingX не актуально?
@SAF0001_RU
@SAF0001_RU 3 роки тому
Проще наверно не копировать объект в объект, дабы не парится с перегрузкой методов копирования и присваивания. А то сегодня это один объект, завтра другой, а про то что надо внести изменения еще куда-то никто потом и не вспомнит.
@michaelivanov1605
@michaelivanov1605 4 роки тому
Я не понимаю когда мы перегружаем классы, то вводя параметры 10, 2, 5 и т.д они подходят под все перегрузки и по этому всё выводится на экран? А a = b и c = a = b это просто примеры как это выглядит?
@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 5 місяців тому
У Вас произойдет утечка пямяти и программа вылетит с ошибкой. Вы один и то же объект удалаяте два раза. Никакой оператор присваивания у Вас вызываться не будет. Вы просто прсвоили одному указателю значение другого указателя. Нужно: *person_1 = *person_2;
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
@@svvonline1 Это понятно. Но вопрос то был о другом...
@yoqo
@yoqo 4 роки тому
4:19 Не очень понял, почему так. Если мы присваиваем одному объекту другой, то копируются только значения полей. По крайней мере, "this" у них отличаются, и, меняя одно из полей в копии, не меняется поле в оригинале. Так почему же объект "a" начинает думать, что он и есть объект "b"?
@andreyvolkov3117
@andreyvolkov3117 3 роки тому
Я понял (я не уверен), что это из-за работы с динамической памятью, т.к. data в private имеет указатель(*). И формально, мы передаём данные по данному указателю (ну, другое само собой придётся тоже делать под такой тип, чтобы работало, я про всё в классе)
@almatytelecom1
@almatytelecom1 2 роки тому
потому что ты указатели присваиваешь друг другу. И указатели становятся одинаковыми, т.е. начинают указывать на одну и ту же память.
@lllZarakilll
@lllZarakilll 5 місяців тому
Понял суть, деталицазцию под капотом не всю. Меня терзает только один вопрос - Зачем все это нужно? Практическое применение, жаль что не приводятся примеры этого.
@forixsins
@forixsins 5 місяців тому
Удобство, но это если умеренно применять. В перегрузках с выделением памяти вообще специфика жëсткая, это скорее для прошареных тема
@temshik.invalid
@temshik.invalid 3 роки тому
14:00
@TheZandrey
@TheZandrey 6 років тому
думаю еще надо учесть момент a = a;
@faustomendez6567
@faustomendez6567 6 років тому
this в помощь
@wasony.126
@wasony.126 4 роки тому
@@faustomendez6567 хорош
@aviator1472
@aviator1472 11 місяців тому
​@@faustomendez6567 а причем тут this?
@gans0072
@gans0072 10 місяців тому
23:05 для чего он поставил & между MyClass и operator ? буду очень благодарен за ответ.
@mashauser1812
@mashauser1812 10 місяців тому
он же объяснил типо))) сам не понимаю
@gans0072
@gans0072 10 місяців тому
@@mashauser1812 самое интересное, что я смог разобраться...
@peaktop3286
@peaktop3286 4 місяці тому
@@gans0072 ну и почему?
@gans0072
@gans0072 4 місяці тому
@@peaktop3286 я уже забыл.. Что-то вроде указатель на указатель
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
@@gans0072 bruh ☠️
@PazhilayaGodzila
@PazhilayaGodzila 2 роки тому
6:48 подскажите, пожалуйста, каким сочетанием также комментировать
@PazhilayaGodzila
@PazhilayaGodzila 2 роки тому
нашел, Ctrl+Shift+/
@C2H5OHH
@C2H5OHH 2 роки тому
Что такое other, после которого ставится точка и пишется что-то ещё? Помогите, пожалуйста!
@user-ei8mx7sg6w
@user-ei8mx7sg6w 3 роки тому
жООПа
@kaynsolo
@kaynsolo 6 років тому
А что если мне нужно будет переинициализировать объект "a" второй раз? Сработает конструктор класса и мы получим утечку?
@panda9303
@panda9303 4 роки тому
Конструктор срабатывает один раз при создании экземпляра класса. Затем ты можешь присвоить отдельным паблик полям новые значения (тут нет никакого конструктора), ну либо же присвоить новый объект. Как раз для этого мы и перегрузили оператор присваивания.
@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)" Всё работает в итоге.
@Kokurorokuko
@Kokurorokuko 2 роки тому
Я не совсем понимаю, почему мы возвращаем ссылку на объект, а не сам объект. Объясню что я имею в виду. Когда мы присваиваем объект 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 2 роки тому
Я не уверен, что до конца понял, но попробую объяснить это на том уровне, на котором всё-таки дошло. Если вспомнить урок про ссылки, то там говорилось, что ссылочный тип не требует разыменования. Соответственно, написать b = Foo2(a); это то же самое, что и написать int& c = Foo2(a); b = c; В последней строчке мы хоть и работаем с ссылкой, но никаких операторов к ней не применяем. Т.к. запись "c" уже подразумевает только значение, лежащее по этому адресу. Так и в примере с объектами. Мы возвращаем ссылку на объект b после первой операции присваивания, а потом уже эта ссылка, как результат функции, никаких операторов разыменования не требует, поэтому мы спокойно используем её в функции. Хотя всё-равно получается в функции ссылка на ссылку, но это, я так понимаю, нормально. Кстати, объяснять что-то кому-то другому бывает полезно для собственного понимания вопроса.
@almatytelecom1
@almatytelecom1 2 роки тому
изучи конкретно , что такое ссылка и ты поймешь.
@aviator1472
@aviator1472 10 місяців тому
​@@almatytelecom1 я изучил и все равно не понимаю почему у автора в конце Myclass & operator= вместо просто Myclass operator=? Мы же все равно возвращаем САМ объект *this...
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
@@aviator1472 да дурдом тут какой-то
@n1kes987
@n1kes987 Рік тому
А почему бы нам не возвращать &*this из перегруженого оператора? Если я правильно понимаю, то this - указатель объекта на самого себя, *this - сам объект, а &*this - ссылка на этот объект.
@aviator1472
@aviator1472 10 місяців тому
Я вообще не понимаю зачем там нужна ссылка если мы возвращаем САМ объект *this...
@sleepyNovember_project
@sleepyNovember_project 3 місяці тому
@@aviator1472 Наверное по сути ссылка там и не нужна, но только потому, что этот перегруженный оператор и так принимает объект по ссылке (в его аргументах задано)
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 4 роки тому
Хочу добавить один момент, который может быть не очевиден. Рассмотрим работу оператора присваивания ПОСЛЕ того, как Сергей дополнил его возвращаемым значением *this 1) Когда выполняется инструкция a = b; значение *this возвращается, но НЕ ИСПОЛЬЗУЕТСЯ. 2) Когда выполняется инструкция c=a=b; - значение *this возвращается в первом присвоении, но НЕ используется, но, используется во втором присвоении, чтоб присвоить резльтат переменной с. Для более простого понимания можно написать так: с=(a=b). Не понимаю почему так, но так. Наверно я что-то паропустил в самом начале.
@almatytelecom1
@almatytelecom1 2 роки тому
так потому что есть понятие ассоциативность операторов(из математики). Ассоциативность бывает справа-налево или слева-направо.
@temshik.invalid
@temshik.invalid 3 роки тому
22:50
@neverhoodJK
@neverhoodJK 6 років тому
Я понял, это нереально
@temshik.invalid
@temshik.invalid 3 роки тому
11:25
3D Environment MasterClass VOL. 3 | DETAIL is Photorealism
3:58:56
Level 1 to 100 Mystery Buttons
00:46
A4
Переглядів 6 млн