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

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ก.ย. 2024
  • Понравилось видео или оказалось полезным? Подпишись!
    В этом уроке начнём рассматривать такие особенности ООП как перегрузка операторов. Для начала рассмотрим пример и синтаксис перегрузки, узнаем для чего нужна перегрузка операторов. Первая перегрузка пример которой мы рассмотрим будет перегрузка оператора присваивания. Обращаю ваше внимание на то, что для полного понимания этого вопроса вам необходимо знать что такое конструктор копирования и для чего он нужен. (ссылка на соответствующий урок чуть ниже в описании).
    Перегрузка операторов пример. ООП. Перегрузка оператора присваивания. 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

ความคิดเห็น • 297

  • @SimpleCodeIT
    @SimpleCodeIT  7 ปีที่แล้ว +72

    В этом уроке начнём рассматривать такие особенности ООП как перегрузка операторов. Для начала рассмотрим пример и синтаксис перегрузки, узнаем для чего нужна перегрузка операторов. Первая перегрузка пример которой мы рассмотрим будет перегрузка оператора присваивания. Обращаю ваше внимание на то, что для полного понимания этого вопроса вам необходимо знать что такое конструктор копирования и для чего он нужен.

    • @eninyri
      @eninyri 5 ปีที่แล้ว

      привет. только ты не рассказал почему вызывается конструктор копирования после команды return *this ! давай раз уже начал!

    • @mukhavertolet
      @mukhavertolet 4 ปีที่แล้ว +4

      @@eninyri никакой там конструктор копирования не вызывается

    • @daclicker
      @daclicker 3 ปีที่แล้ว

      подскажите пожалуйста, где уроки с 63 по 83? Вы в 83 уже по полной в ООП углубляетесь, а на 63 только подбирались. Думал я дурак, но все обыскал и не нашел(

    • @ИгорьК-т1ш
      @ИгорьК-т1ш 3 ปีที่แล้ว +1

      Чувствую, нужно покупать вентилятор по мощнее, мой мозг перегрелся)) Возврат ссылки на объект меня просто убил, пытаюсь переварить этот урок))

    • @777noob777saibot
      @777noob777saibot 3 ปีที่แล้ว +2

      Честно говоря теперь код стал довольно большим, со всякими конструкторами , деструкторами и перегрузками....и поэтому теперь чтобы нормально разобраться нужно посмотреть на код целиком, а у тебя в окне Студии видна только часть кода и при таком быстром скроллинге разумеется ничего не успеешь рассмотреть, а на паузу ставить тот ещё геморой. Жаль что исходный код теперь недоступен.

  • @ИванГончаренко-п2н
    @ИванГончаренко-п2н 6 ปีที่แล้ว +415

    1:15 "А" равно, ну к примеру, 5.
    а=2

    • @fenikdolgouhiy4624
      @fenikdolgouhiy4624 6 ปีที่แล้ว +48

      Иван Гончаренко И так по жизни. А потом ищешь что не работает :D

    • @adiletastana2781
      @adiletastana2781 5 ปีที่แล้ว +22

      Ну ошибся человек, с кем не бывает. Тем более это обычная интовая переменная.

    • @dmytrolytvynenko6537
      @dmytrolytvynenko6537 5 ปีที่แล้ว +16

      @@adiletastana2781 однажды из-за одного бита, не байта, а бита, случилось авиакрушение

    • @АртемНезабудкин-п1г
      @АртемНезабудкин-п1г 4 ปีที่แล้ว +37

      @@dmytrolytvynenko6537 вашего пукана?)

    • @КалпакчиАртем
      @КалпакчиАртем 4 ปีที่แล้ว +1

      @@АртемНезабудкин-п1г авиа

  • @LenTos1337
    @LenTos1337 6 ปีที่แล้ว +281

    Как всегда спасибо за уроки. Для тех кто не понял фишку с тем, зачем нужно возвращать ссылку на объект. Уравнение с = b = a в оригинале выглядит так:
    c.operator=(b.operator=(a)); то есть, сначала в объект b мы присваиваем объект a, и чтобы мы могли присвоить сразу же в объект c наш объект b, наша функция присваивания a в b должна вернуть ссылку на этот объект b, потому что оператор присваивания c не может работать с функцией оператора присваивания a в b, если эта функция не возвращает необходимую ссылку на объект b. Сам пытался додуматься очень долго, для тех, кто не понял, попробуйте прочитать моё объяснение, может поймете лучше.

    • @theomi8633
      @theomi8633 6 ปีที่แล้ว +28

      Ну да всё так. Оператор = принимает ссылку на объект, а возвращает void, а надо чтобы возвращал тоже ссылку на такой же объект. На самом деле вернуть надо не ссылку, а объект или объект по ссылке.

    • @ЯЗдесь-ъ5ф
      @ЯЗдесь-ъ5ф 6 ปีที่แล้ว +9

      Спасибо!, теперь понял более подробно.

    • @doge8633
      @doge8633 5 ปีที่แล้ว +10

      Может я тупой, но я не понял. Много букаф

    • @DenisBilurka
      @DenisBilurka 5 ปีที่แล้ว +3

      @@doge8633 Жиза

    • @alexandrprodan8794
      @alexandrprodan8794 4 ปีที่แล้ว +10

      Слава Богу, заглянул в комменты, а то еще бы день провозился.Спасибо!

  • @borisshalabanov4620
    @borisshalabanov4620 6 ปีที่แล้ว +103

    ты просто машина, я тут как улитка сижу и въежаю,
    спасибо за уроки

  • @Jessica_Cat-l1v
    @Jessica_Cat-l1v 7 หลายเดือนก่อน +4

    до какого-то момента мне удавалось проходить и усваивать 2-3 урока за день, а теперь трешак начался -
    на 82 урок почти 3 дня🤯🤯🤯, но я пока не сдаюсь. Огромная благодарность Сергею, что может донести инфу даже такому тугодуму - как я😎

  • @sabatr1989
    @sabatr1989 6 ปีที่แล้ว +90

    то чувство теплоты в черепной коробке, свидетельствующей о перегреве мозга...но снова на третий раз "зашло всё" до каждого символа! Спасибо.

    • @nurbolatnurguatov2407
      @nurbolatnurguatov2407 6 ปีที่แล้ว +17

      Artem Kuleshov ты меня смотивировал я думал я один такой с первого раза не вьезжаю мол значит не мое это и я туп, думал на 82 83 остановиться бросить, думал у всех идет по маслу, один урок за др, оказ надо пересмотреть, если не 2раза так еще, значит я один из вас, попробую заново

    • @Wardriving666
      @Wardriving666 4 ปีที่แล้ว +1

      @@nurbolatnurguatov2407 Ты не один такой=)

    • @vitusink6445
      @vitusink6445 4 ปีที่แล้ว +2

      @@Wardriving666 Конечно не один, Сережа мощно буксанул с обьяснениями как только добрался до чего то сложного.
      Любитель, что вы хотите?! Но хорошо что хоть такой есть. Часто любитель работает лучше не мотивированного профессионала

    • @aleksandrdrobyshev7623
      @aleksandrdrobyshev7623 4 ปีที่แล้ว

      @@nurbolatnurguatov2407 До какого урока дошел, или прошел все? Я не однократно сдавался на каком-то этапе, теряя нить понимания.

  • @MetaLMaDneSS1
    @MetaLMaDneSS1 6 ปีที่แล้ว +102

    только Бьёрн Страуструп понял этот урок ))

  • @Magomedrasul7
    @Magomedrasul7 6 ปีที่แล้ว +61

    Было тяжко понять урок, бросил все, пошел гулять, чуть позже вернулся, посмотрел и понял все )). Чем дальше тем сложнее, так кажется, на самом деле иногда надо просто отвлечься/отдохнуть.

    • @Kokurorokuko
      @Kokurorokuko 5 ปีที่แล้ว

      да, согласен

    • @George_Ryazantsev
      @George_Ryazantsev 2 ปีที่แล้ว

      спасибо, согласен полностю

    • @movich9161
      @movich9161 2 ปีที่แล้ว +13

      Жиза. Только у меня сначала возникает желание умереть, потом приходит осознание, что прошла неделя и уже потом принятие

    • @ЛеонидБулгаков-е2т
      @ЛеонидБулгаков-е2т ปีที่แล้ว

      мне это далось гораздо легче конструктора копирования

    • @urrbanskiy
      @urrbanskiy 7 หลายเดือนก่อน

      отдых - тоже часть работы

  • @whhhhitee
    @whhhhitee 6 ปีที่แล้ว +82

    Все видео более информативные и понятные, чем наши лекции в университете. Большое спасибо!

  • @VolodymyrChe
    @VolodymyrChe 3 ปีที่แล้ว +6

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

  • @AV1ch
    @AV1ch 4 ปีที่แล้ว +22

    Тут в начале, на 3:00, есть большая неточность.
    Автор говорит «объект А будет думать, что он объект Б». (по описанию похоже на работу указателей, и это запутывает)
    Правильно: ОТДЕЛЬНЫЕ ПОЛЯ в объекте А, которые являются указателями, получат те же адреса которые в этих же полях-указателях в объекте Б.
    Объекты классов - это самостоятельные единицы, у каждого объекта свои поля. Не может быть один объект порван между двумя разными переменными. Бывают &ссылки , но ссылка - это дополнительное имя переменной, а не собственно переменная.
    Если присвоить один объект другому:
    а = б; //и если они одного класса
    , то
    1) указатели в «а» получат те же адреса, что указатели в «б»
    2) остальные поля в «а» получат те же значения, что эти же поля в «б»
    По причине 1) вот здесь 4:52 показываются одинаковые адреса. Среда показывает адрес указателя *data , который содержится в каждом объекте. (Почему показывается именно он? Потому что он - самый первый в каждом объекте. Среда берёт ближайшее к началу поле в объекте, и в данном случае это поле - указатель *data.)
    Это называют «поверхностное копирование» (shallow copy), то есть когда оператор присваивания или конструктор копирования даёт указателям адрес на ту же память, что и в исходном объекте. В Си++ в классах оператор присваивания и конструктор копирования по умолчанию работают так (если их не переопределить).
    «Глубокое копирование» (deep copy) - это когда оператор присваивания или конструктор копирования выделяет новую память. То есть если в исходном объекте есть указатель на память, выделенную через "new", то оператор присваивания или конструктор копирования выделяет новую память для указателя в том объекте, куда копируются данные из исходного объекта.

    • @Tolyan97kartofan
      @Tolyan97kartofan 2 ปีที่แล้ว

      Спасибо, что расписал это, братан! Тоже смутило это, уже собирался проект собирать свой и проверять

    • @ИгроманРоман-н2ш
      @ИгроманРоман-н2ш ปีที่แล้ว

      спасибо а то и вправду запутало

    • @gfhitdxaahn
      @gfhitdxaahn ปีที่แล้ว +4

      Да храни тебя араб в подвале! Выручил

    • @misha2993
      @misha2993 ปีที่แล้ว

      Нихрена не понял, но понял, что автор что-то напутал

    • @AV1ch
      @AV1ch ปีที่แล้ว +1

      @@misha2993 Другими словами.
      Автор говорит «объект А будет думать, что он объект Б».
      Правильно: ОТДЕЛЬНЫЕ ПОЛЯ в объекте А, которые являются указателями, получат те же адреса которые в этих же полях в объекте Б.

  • @maksimshekhunov4079
    @maksimshekhunov4079 6 ปีที่แล้ว +19

    Спасибо, что ты есть

  • @igorfrolov6246
    @igorfrolov6246 2 ปีที่แล้ว +3

    Спасибо тебе! Годы идут, а материал по-прежнему очень полезен, нигде не встречал более понятного объяснения!!!

  • @lexcarpenter69
    @lexcarpenter69 3 ปีที่แล้ว +4

    Это такое удовольствие понимать, что происходит. Спасибо за уроки

  • @АлександрХардин-в2н
    @АлександрХардин-в2н 6 ปีที่แล้ว +10

    Большое спасибо за уроки! Все на высшем уровне.

  • @vnaqr
    @vnaqr 5 ปีที่แล้ว +17

    a равно, к примеру 5. а = 2. Лайк однозначно)))

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 7 ปีที่แล้ว +28

    немного сложно,но интересно! Спасибо за урок!!!

  • @ВиталийСусский-я2м
    @ВиталийСусский-я2м 3 ปีที่แล้ว +3

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

  • @ivan100kg
    @ivan100kg 4 ปีที่แล้ว +2

    Спасибо за разъяснение отличий конструктора копирования и оператора присваивания!

  • @Вероника-щ1ф6у
    @Вероника-щ1ф6у 6 ปีที่แล้ว +25

    Спасибо за урок)) Очень не хватает задач! Я лучше усваиваю материал когда записываю информацию или работаю на практике(как и многие, наверно), поэтому пока нет задач я каждый сложный урок конспектирую.)))

    • @ВолодяСвіргун-х5д
      @ВолодяСвіргун-х5д 6 ปีที่แล้ว +10

      Могу тебе свои лабораторки скидывать

    • @lejouet2183
      @lejouet2183 6 ปีที่แล้ว +1

      Бро, мне тоже скинь лабы. Заранее спасибо)

    • @Роман-т5е6с
      @Роман-т5е6с 2 ปีที่แล้ว

      @@ВолодяСвіргун-х5д Братан,скинь пж

    • @dikii45
      @dikii45 2 ปีที่แล้ว +5

      @@Роман-т5е6с спустя 3 года)))) ну если скинут то и мне скинь)

    • @CoolbitsVDA
      @CoolbitsVDA ปีที่แล้ว

      @@ВолодяСвіргун-х5д Спустя 4 года (кто больше?) И мне скинь плиз!!!

  • @Ermine882
    @Ermine882 7 ปีที่แล้ว +14

    Спасибо за урок.

  • @janaschelle8377
    @janaschelle8377 5 ปีที่แล้ว +4

    Очень хорошие уроки, понятным языком! Большое спасибо!

  • @flepjack
    @flepjack 3 ปีที่แล้ว +3

    Как ни странно, понял с первого раза) спасибо за предыдущий урок)

  • @nightgames3158
    @nightgames3158 3 ปีที่แล้ว +1

    Это уже второй урок который я с первого раза не понимаю...Ну ничего,раза два ещё посмотрю и точно пойму.Спасибо вам:)

  • @dangerous2627
    @dangerous2627 10 หลายเดือนก่อน +23

    У меня перегрузка мозгов

  • @CoolbitsVDA
    @CoolbitsVDA ปีที่แล้ว

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

    • @Empty_line
      @Empty_line ปีที่แล้ว

      Привет, почему у конструктора и оператора адреса похожи? 18:15

  • @lennoxmacduff2037
    @lennoxmacduff2037 6 ปีที่แล้ว +109

    Потрясающие уроки
    Жонглировать объектами и конструкторами гораздо сложнее чем в java
    Но, чёрт возьми, это же ОФИГЕННО
    Чём больше язык предоставляет способов прострелить себе ногу - тем он круче и мощнее

    • @vitusink6445
      @vitusink6445 4 ปีที่แล้ว +17

      Тебе хорошо зайдет ассемблер :)
      Резвись наслаждайся :)
      А понимаю почему люди придумывают все более высокие по уровню языки...

  • @МихаилКрылов-п5ч
    @МихаилКрылов-п5ч 3 ปีที่แล้ว +3

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

  • @Alex_Suvorov
    @Alex_Suvorov 6 หลายเดือนก่อน

    Спасибо за уроки!! После предыдущего было очень просто, весь код практически смог сам написать, ставя на паузу, только с if не додумался)

  • @alexdomanskyi7301
    @alexdomanskyi7301 ปีที่แล้ว

    Круто и наглядно сделано! Правильная подача для новичкои. Проблема многих книг - это завышенная сложность синтаксиса сбивающая новичков.

    • @Empty_line
      @Empty_line ปีที่แล้ว

      Привет, почему у конструктора и оператора адреса похожи? 18:15

  • @panschindler9370
    @panschindler9370 4 ปีที่แล้ว +31

    Сурс урока. Может кому надо будет...
    #include
    #include
    using namespace std;
    class Point
    {
    private:
    int x;
    int y;
    public:
    Point()
    {
    x = 0;
    y = 0;
    cout

  • @onlyrock1351
    @onlyrock1351 4 ปีที่แล้ว +2

    Спасибо, всё просто и интересно!

  • @SimpleCodeIT
    @SimpleCodeIT  7 ปีที่แล้ว +10

    #перегрузкаоператоров #ООП #SimpleCode #урокипрограммирования

  • @morskoy_ezhik
    @morskoy_ezhik ปีที่แล้ว

    Сколько уже смотрю уроки на этом канале, и только сейчас заметил, что на фоне играет жесткий рок)

  • @Гычпук
    @Гычпук ปีที่แล้ว

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

    • @frosten5746
      @frosten5746 ปีที่แล้ว

      И какая понял что к чему?

    • @Гычпук
      @Гычпук ปีที่แล้ว

      @@frosten5746 да

  • @elvinaustin1022
    @elvinaustin1022 5 ปีที่แล้ว

    Все понял , после пред идущего урока , этот урок сразу отлично понял , спасибо Серега за тщательное разъяснение.

  • @ИгорьОрлов-ж3ц
    @ИгорьОрлов-ж3ц 6 ปีที่แล้ว +3

    Спасибо земеля! Очень нужные уроки, я надеюсь. Был бы кто-то другой на твоём месте, то давно бы уже бросил изучать. На самом деле мозг уже отключается для восприятия информации. Испробовал методы заставить мозг работать,-гуляние на свежем воздухе, кофе, физ.зарядка, но чувствую пропадает желание к обучению. Какие способы себя заставить можете посоветовать, -ведь нежелательно делать большой перерыв, так как можно забыть чему научился.

    • @Slime191
      @Slime191 6 ปีที่แล้ว +4

      Лучший способ заставить себя учиться- Желание. А если его нет, то ищи способы его культивировать.
      Я смотрел разные фильмы, музыку, искал плюсы в чём-то и втягивался. В итоге, когда желание есть ,можно шпрехать не на голом энтузиазме и силе воли, а на нескончаемом генераторе энергии- Желании)

  • @Hunve
    @Hunve ปีที่แล้ว +3

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

    • @viper_0097
      @viper_0097 8 หลายเดือนก่อน

      А потом переполнение стека...

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน

      Это не рекурсия, это просто реверс

  • @vskavronskyi
    @vskavronskyi 3 ปีที่แล้ว

    Весьма хорошая подача материала, Вы большой молодец!

  • @ИльяСоседский-л6о
    @ИльяСоседский-л6о ปีที่แล้ว +1

    лучший из лучших

    • @Empty_line
      @Empty_line ปีที่แล้ว

      Привет, почему у конструктора и оператора адреса похожи? 18:15

  • @nicivanov5135
    @nicivanov5135 3 ปีที่แล้ว

    В этом случае все понятно описано.
    Но есть масса других случаев и операторов, со своей спецификой перегрузки.
    Нужно больше примеров по этой теме, перегрузки.

  • @RrRrRrRroman
    @RrRrRrRroman ปีที่แล้ว +2

    Блин, весь урок понимал-понимал, в последние 3 минуты всё сломалось)))

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน +1

      Ёкарный бабай, тоже самое, но я сонный ночью посмотрел

  • @ИванКозловский-ш9н
    @ИванКозловский-ш9н ปีที่แล้ว

    привет из 2023, спасибо большое за уроки!

  • @666towelie
    @666towelie 4 ปีที่แล้ว +3

    Спасибо за урок! Не понял только зачем делать проверку указателя data на nullptr, ведь ничего не произойдет если мы вызовем delete указателя, указывающего на nullptr?

  • @ylikitishnik1946
    @ylikitishnik1946 3 ปีที่แล้ว

    со второй попытки понял спасибо за урок

  • @zubrailx6416
    @zubrailx6416 4 ปีที่แล้ว +3

    Останавливаюсь тут, основные моменты языка вроде как понял, а пока пойду на пайтон. Конечно, не собираюсь бросать этот язык, просто немного огонек подсбавлю, 15 видео в день по-моему многовато, буду 1-2 усваивать. :) А пока на фриланс!)

    • @alexgaran5339
      @alexgaran5339 3 ปีที่แล้ว

      Я уже месяца 3 по одному видео смотрю. Так легче усваивать. Все не запомнишь.

  • @glebskachko1811
    @glebskachko1811 5 ปีที่แล้ว

    Невероятно спокойно и доходчиво. Курс ООП с универа за месяц у тебя прошёл за 10 часов :)

    • @VIONICK08
      @VIONICK08 5 ปีที่แล้ว

      не одно и то же?

  • @КОД-ш8у
    @КОД-ш8у 5 ปีที่แล้ว +6

    єто как в сказке Алиса В Стране Чудес - кролик откусил сам себе свою же голову :-)

  • @Kokurorokuko
    @Kokurorokuko 3 ปีที่แล้ว +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 ปีที่แล้ว +2

      Я не уверен, что до конца понял, но попробую объяснить это на том уровне, на котором всё-таки дошло. Если вспомнить урок про ссылки, то там говорилось, что ссылочный тип не требует разыменования. Соответственно, написать
      b = Foo2(a);
      это то же самое, что и написать
      int& c = Foo2(a);
      b = c;
      В последней строчке мы хоть и работаем с ссылкой, но никаких операторов к ней не применяем. Т.к. запись "c" уже подразумевает только значение, лежащее по этому адресу.
      Так и в примере с объектами. Мы возвращаем ссылку на объект b после первой операции присваивания, а потом уже эта ссылка, как результат функции, никаких операторов разыменования не требует, поэтому мы спокойно используем её в функции.
      Хотя всё-равно получается в функции ссылка на ссылку, но это, я так понимаю, нормально.
      Кстати, объяснять что-то кому-то другому бывает полезно для собственного понимания вопроса.

    • @almatytelecom1
      @almatytelecom1 3 ปีที่แล้ว

      изучи конкретно , что такое ссылка и ты поймешь.

    • @aviator1472
      @aviator1472 ปีที่แล้ว +2

      ​@@almatytelecom1 я изучил и все равно не понимаю почему у автора в конце Myclass & operator= вместо просто Myclass operator=? Мы же все равно возвращаем САМ объект *this...

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน

      @@aviator1472 да дурдом тут какой-то

  • @DenKof81
    @DenKof81 5 ปีที่แล้ว

    Спасибо за урок!

  • @8lxckcxt
    @8lxckcxt 3 ปีที่แล้ว

    Спасибо! идём дальше

  • @bulba1995
    @bulba1995 2 ปีที่แล้ว

    Да тут я поплыл ,вроде как все понял но не точно. Спасибо

  • @Newsvan1
    @Newsvan1 5 ปีที่แล้ว

    Всё очень понятно и подробно расписано. Большое спасибо!

  • @Артьом-о2ъ
    @Артьом-о2ъ หลายเดือนก่อน

    Обычно в реализации оператора присваивания также проверяют, происходит ли самоприсваивание (то есть, this и &other указывают на один и тот же объект). Это позволяет избежать ненужных операций. Это может выглядеть так:
    if (this == &other) {
    return *this;
    }
    Эту проверку можно вставить в начале метода.

    • @Артьом-о2ъ
      @Артьом-о2ъ หลายเดือนก่อน

      Вот пример улучшеного кода:
      Human& operator=(const Human& other)
      {
      if (this == &other) {
      return *this; // Проверка на самоприсваивание
      }
      cout data = new int[other.size];
      for (int i = 0; i < other.size; i++) {
      this->data[i] = other.data[i];
      }
      return *this;
      }

  • @etniqa3638
    @etniqa3638 5 ปีที่แล้ว +2

    вечный курс

  • @topervidos3640
    @topervidos3640 5 ปีที่แล้ว +3

    Обращение к автору. Объект a не будет думать, что он объект b. Потому что, присваивание идёт только по значению, а адреса у обеих переменных, разные так и остаются как и были изначально. Посмотрите, что вы преподаёте с 4 м. 20 сек. ролика.

    • @Hippan_
      @Hippan_ 5 ปีที่แล้ว

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

  • @romkagm7756
    @romkagm7756 3 ปีที่แล้ว

    Чихнул когда сказал что его зовут Сергей - значит правда =)

  • @zzz-vl7ju
    @zzz-vl7ju 4 ปีที่แล้ว +2

    Спасибо! Я даже понял почему мы ссылку возвращаем ! Очень круто . Спасибо вам огромное .(Вопрос)Мы можем с помощью delete удалить данные из статической памяти ?

    • @aviator1472
      @aviator1472 ปีที่แล้ว

      И почему мы возвращаем ссылку? Для чего вообще нам эта ссылка если мы возвращаем *this тоесть тот же объект..

  • @Anton-og1wm
    @Anton-og1wm 2 ปีที่แล้ว

    Братан, Это очень круто!!!!

  • @mvoo2340
    @mvoo2340 ปีที่แล้ว +2

    А если при присваивании объектов друг другу всё равно им присваиваются разные адреса даже без перегрузки оператора, это новые версии компилятора или Visual Studio 17 так делает?

  • @зайка-щ9о
    @зайка-щ9о ปีที่แล้ว

    Спасибо тебе !!!

  • @ДмитрийРоманчук-д2н
    @ДмитрийРоманчук-д2н 4 ปีที่แล้ว +3

    Может кто то к примеру сказать где это используется, а то уже нить потерял зачем она используется, тока надо пример из реальной жизни, что писать чтобы работало понятно, нужен просто пример

  • @СергейМедведев-т9т
    @СергейМедведев-т9т 3 ปีที่แล้ว

    Спасибо!

  • @АндрейСапрыгин-к7к
    @АндрейСапрыгин-к7к 4 ปีที่แล้ว +2

    то есть, как я понимаю мы перегрузили оператор равно так, чтобы он выполнял функцию конструктора копирования?

  • @alexanderzaretskiy4188
    @alexanderzaretskiy4188 3 ปีที่แล้ว +1

    Проверка на delete nullptr не нужна, т.к. delete в этом случае не предпримет никаких действий. А вот проверить на случай:
    MyClass A;
    A = A;
    вполне стоит, без проверки присвоения самого себе произойдет неприятная ситуация потери данных...

  • @lllZarakilll
    @lllZarakilll 10 หลายเดือนก่อน

    Понял суть, деталицазцию под капотом не всю. Меня терзает только один вопрос - Зачем все это нужно? Практическое применение, жаль что не приводятся примеры этого.

    • @forixsins
      @forixsins 10 หลายเดือนก่อน

      Удобство, но это если умеренно применять. В перегрузках с выделением памяти вообще специфика жëсткая, это скорее для прошареных тема

  • @eninyri
    @eninyri 5 ปีที่แล้ว +3

    привет. только ты не рассказал почему вызывается конструктор копирования после команды return *this ! давай раз уже начал!

    • @almatytelecom1
      @almatytelecom1 3 ปีที่แล้ว +1

      потому что передача в функцию и возврат из нее в обычном случае происходит по значению.
      И при передаче по значению происходит копирование из внешних переменных во внутренние, и наоборот при выходе из функции копирование из внутренних во внешние.
      p.s.( под обычным случаем я понимаю вызов функции без использования указателей и ссылок)

  • @outcast-cr5yy
    @outcast-cr5yy 6 ปีที่แล้ว +3

    Черт) сложновато. Но все равно спасибо.

  • @naikvitlich1093
    @naikvitlich1093 6 ปีที่แล้ว

    Круто!

  • @ИванКомаревич-е1т
    @ИванКомаревич-е1т 10 หลายเดือนก่อน

    Красава!

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 ปีที่แล้ว

    спасибо

  • @СергейКурмей-я9ь
    @СергейКурмей-я9ь 7 หลายเดือนก่อน

    спасибо)

  • @GamerGuyMen
    @GamerGuyMen 4 ปีที่แล้ว +2

    Я так полагаю, что мы возвращаем значение из-за того, что в итоге при присваивании объекта b к c оператор у нас не будет перегружен, если не вернется ссылка на объект

  • @ARproj
    @ARproj 6 ปีที่แล้ว

    попробую угадать досмотрев до 10:16 что должен возвращать указатель на то куда присваиваем :)

  • @ВиталийБорисов-м5я
    @ВиталийБорисов-м5я 5 หลายเดือนก่อน

    в 82 уроке , я ещё понял кое как . с помощью того, что this действует только в текущем классе. а в этом уроке я понял, что я нихрена ни понял ни тот ни этот урок. в этом уроке this->date во всех классах меняет свои значения. зачем создавать уроки для новичков, если на самом деле снимаются уроки для самого себя , только себе понятно что и как.

    • @sleepyNovember_project
      @sleepyNovember_project 4 หลายเดือนก่อน

      Думаю такого объяснения достаточно, потому что если человек сам поймёт как работает остальное, то что не досказано в уроке, то ему открывается дорога дальше.
      В этом курсе, особенно по части ООП достаточно хорошая информация, но много чего надо до-понять самому.
      Иначе говоря для бесплатного курса тут отличная информация

  • @TheZandrey
    @TheZandrey 7 ปีที่แล้ว +4

    думаю еще надо учесть момент a = a;

    • @faustomendez6567
      @faustomendez6567 6 ปีที่แล้ว +1

      this в помощь

    • @wasony.126
      @wasony.126 4 ปีที่แล้ว

      @@faustomendez6567 хорош

    • @aviator1472
      @aviator1472 ปีที่แล้ว

      ​@@faustomendez6567 а причем тут this?

  • @1kuso4ek
    @1kuso4ek 4 ปีที่แล้ว +2

    А как тогда поступить, если мы создаем объект класса в динамической памяти, то есть, допустим, у нас класс, содержащий одно поле - имя, мы создадим два объекта, в классе реализуем перегрузку оператора присвоения, присвоим и как дальше? Как очистить область памяти?
    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 10 หลายเดือนก่อน

      У Вас произойдет утечка пямяти и программа вылетит с ошибкой. Вы один и то же объект удалаяте два раза. Никакой оператор присваивания у Вас вызываться не будет. Вы просто прсвоили одному указателю значение другого указателя.
      Нужно: *person_1 = *person_2;

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน

      @@svvonline1 Это понятно. Но вопрос то был о другом...

  • @nikitasuyazov2060
    @nikitasuyazov2060 4 หลายเดือนก่อน

    Вот этот конструктор "MyClass(const MyClass &other)" так выносит мозг наличием ссылки &other. Вроде всё знакомо, но в целом почему после вызова "MyClass b = a;" идёт 2 перегрузка сложно.

    • @sleepyNovember_project
      @sleepyNovember_project 4 หลายเดือนก่อน

      Внимательнее смотреть и слушать надо

    • @nikitasuyazov2060
      @nikitasuyazov2060 4 หลายเดือนก่อน +1

      @@sleepyNovember_project это очевидно. Но не только.

    • @sleepyNovember_project
      @sleepyNovember_project 4 หลายเดือนก่อน

      ​@@nikitasuyazov2060 ну как, уже понял? :)

    • @nikitasuyazov2060
      @nikitasuyazov2060 29 วันที่ผ่านมา +1

      @@sleepyNovember_project уже понял)

    • @sleepyNovember_project
      @sleepyNovember_project 29 วันที่ผ่านมา

      @@nikitasuyazov2060 замечательно

  • @СолерИзАсторы
    @СолерИзАсторы 3 ปีที่แล้ว

    Проще наверно не копировать объект в объект, дабы не парится с перегрузкой методов копирования и присваивания. А то сегодня это один объект, завтра другой, а про то что надо внести изменения еще куда-то никто потом и не вспомнит.

  • @matweymishenko2811
    @matweymishenko2811 6 ปีที่แล้ว +3

    Было бы уместное перед тем как начинать удалять массив проверять что other!= this

    • @voltamper96
      @voltamper96 6 ปีที่แล้ว

      да если a = a;

  • @aleksandrdrobyshev7623
    @aleksandrdrobyshev7623 4 ปีที่แล้ว

    Хочу добавить один момент, который может быть не очевиден.
    Рассмотрим работу оператора присваивания ПОСЛЕ того, как Сергей дополнил его возвращаемым значением *this
    1) Когда выполняется инструкция a = b; значение *this возвращается, но НЕ ИСПОЛЬЗУЕТСЯ.
    2) Когда выполняется инструкция c=a=b; - значение *this возвращается в первом присвоении, но НЕ используется, но, используется во втором присвоении, чтоб присвоить резльтат переменной с.
    Для более простого понимания можно написать так: с=(a=b). Не понимаю почему так, но так. Наверно я что-то паропустил в самом начале.

    • @almatytelecom1
      @almatytelecom1 3 ปีที่แล้ว

      так потому что есть понятие ассоциативность операторов(из математики). Ассоциативность бывает справа-налево или слева-направо.

  • @yoqo
    @yoqo 5 ปีที่แล้ว +2

    4:19 Не очень понял, почему так.
    Если мы присваиваем одному объекту другой, то копируются только значения полей. По крайней мере, "this" у них отличаются, и, меняя одно из полей в копии, не меняется поле в оригинале.
    Так почему же объект "a" начинает думать, что он и есть объект "b"?

    • @andreyvolkov3117
      @andreyvolkov3117 4 ปีที่แล้ว

      Я понял (я не уверен), что это из-за работы с динамической памятью, т.к. data в private имеет указатель(*). И формально, мы передаём данные по данному указателю (ну, другое само собой придётся тоже делать под такой тип, чтобы работало, я про всё в классе)

    • @almatytelecom1
      @almatytelecom1 3 ปีที่แล้ว +1

      потому что ты указатели присваиваешь друг другу. И указатели становятся одинаковыми, т.е. начинают указывать на одну и ту же память.

  • @Артьом-о2ъ
    @Артьом-о2ъ หลายเดือนก่อน

    Что означает в сроке this->Size = other.size, зачем там точка "other.Size"? и что она означает?

  • @vovadenys4149
    @vovadenys4149 5 ปีที่แล้ว

    нравится

  • @pahota0
    @pahota0 2 หลายเดือนก่อน

    Ну все)Теперь придется снижать скорость с 1.5x ибо все стало куда сложнее.

  • @tsohee9145
    @tsohee9145 5 ปีที่แล้ว +9

    В 145 строке наверно можно уже писать не "other.Size", а просто "Size"? 19:38

  • @velichkina_masha
    @velichkina_masha 3 ปีที่แล้ว

    Здравствуйте!Подскажите,пожалуйста,оператор присваивания и оператор копирующего присваивания это одно и то же?

  • @n1kes987
    @n1kes987 2 ปีที่แล้ว +1

    А почему бы нам не возвращать &*this из перегруженого оператора? Если я правильно понимаю, то this - указатель объекта на самого себя, *this - сам объект, а &*this - ссылка на этот объект.

    • @aviator1472
      @aviator1472 ปีที่แล้ว +1

      Я вообще не понимаю зачем там нужна ссылка если мы возвращаем САМ объект *this...

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน

      @@aviator1472 Наверное по сути ссылка там и не нужна, но только потому, что этот перегруженный оператор и так принимает объект по ссылке (в его аргументах задано)

  • @Nito4kin
    @Nito4kin 4 ปีที่แล้ว

    10/10

  • @kaynsolo
    @kaynsolo 6 ปีที่แล้ว +2

    А что если мне нужно будет переинициализировать объект "a" второй раз? Сработает конструктор класса и мы получим утечку?

    • @panda9303
      @panda9303 5 ปีที่แล้ว

      Конструктор срабатывает один раз при создании экземпляра класса. Затем ты можешь присвоить отдельным паблик полям новые значения (тут нет никакого конструктора), ну либо же присвоить новый объект. Как раз для этого мы и перегрузили оператор присваивания.

  • @chococrime
    @chococrime 7 หลายเดือนก่อน

    Тут утечка вроде бы. Надо this.size = other.size; после delete прописывать

    • @chococrime
      @chococrime 7 หลายเดือนก่อน

      Тут все равно остаются 1-2 эл. с каждого массива после дэлит, не знаю почему

    • @chococrime
      @chococrime 7 หลายเดือนก่อน

      Точнее даже после вызова дэлит из деструктора

    • @chococrime
      @chococrime 7 หลายเดือนก่อน

      Объясните пожалуйста почему так происходит

    • @sleepyNovember_project
      @sleepyNovember_project 6 หลายเดือนก่อน

      @@chococrime 1.Тут переменная «Size» никак не относится к динамической памяти, и тем более никак не связана с delete, это просто инт с числом
      2.Видимо ты накосячил с размерами при создании нового массива, значит как раз накосячил с Size, или где то в цикле с количеством итераций, нужно в реализации перегрузки оператора сначала узнавать какой там сейчас Size у объекта справа от "=", а потом по этому размеру копировать массив, в общем всё как на видео

  • @1mpalo362
    @1mpalo362 ปีที่แล้ว

    Вместо ручного копирования можно было использовать функцию std::copy()

  • @TokiuDoki
    @TokiuDoki 4 ปีที่แล้ว

    Обязательно возвращать именно ссылку?

  • @РоманЧудосейкин
    @РоманЧудосейкин 6 หลายเดือนก่อน

    шо да то да после предыдущего ваще пон

  • @TheAadikova
    @TheAadikova 5 ปีที่แล้ว +5

    На удвоенной скорости смотреть нужно, проще понимается

  • @СергейПетров-б1ф
    @СергейПетров-б1ф 4 ปีที่แล้ว +2

    А почему нельзя просто очистить память в главной функции, перед return 0?

    • @jordyfrost
      @jordyfrost 3 ปีที่แล้ว +1

      Допустим ты играешь в игру 10 часов подряд, то уже на 30 минуте тебе нужно будет бежать в магазин за дополнительной ОЗУ.

    • @sleepyNovember_project
      @sleepyNovember_project 8 หลายเดือนก่อน

      Лол, надеюсь это был рофл такой

  • @michaelivanov1605
    @michaelivanov1605 4 ปีที่แล้ว

    Я не понимаю когда мы перегружаем классы, то вводя параметры 10, 2, 5 и т.д они подходят под все перегрузки и по этому всё выводится на экран? А a = b и c = a = b это просто примеры как это выглядит?

  • @neverhoodJK
    @neverhoodJK 6 ปีที่แล้ว +2

    Я понял, это нереально

  • @C2H5OHH
    @C2H5OHH 3 ปีที่แล้ว

    Что такое other, после которого ставится точка и пишется что-то ещё? Помогите, пожалуйста!

  • @movich9161
    @movich9161 2 ปีที่แล้ว

    0:30 прошлые 100 уроков?))