Перегрузка оператора равенства == и не равно !=. Перегрузка логических операторов сравнения. C++ #84

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

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

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

    Очень легко смотрится после 82 и 83 урока, спасибо вам большое, как всегда

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

      Ну конкретно это видео крайне понятное, а вот на предыдущем я чето совсем завис..

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

      @@rocker5652 Не ты один.

    • @ДаниилНепелев-н4х
      @ДаниилНепелев-н4х 2 ปีที่แล้ว

      @@speedwagoooon8740 +

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

      +

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

      @@rocker5652 надо пересматривать несколько раз и никуда не спешить.

  • @Rimmon-s9w
    @Rimmon-s9w 4 ปีที่แล้ว +28

    После 82 - 83 аж relax. Понятно и просто. Спасибо за урок

  • @comagreed6991
    @comagreed6991 6 ปีที่แล้ว +39

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

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

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

  • @pavelios3577
    @pavelios3577 6 ปีที่แล้ว +12

    Благодарен за Ваш труд. С уважением Павел Иванович.

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

      Благодарю за поддержку!

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

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

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

    Ну это уже полегче чем перегрузка оператора присваивания))))

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

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

  • @АндрейГоляченко-г5ч
    @АндрейГоляченко-г5ч 5 ปีที่แล้ว +10

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

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

      Ну что, чего вы добились за 4 года?

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

    Всё понятно и легко, хоть и не с первого раза доходит. Спасибо вам, Сергей, за ваши старания!!!

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

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

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

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

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

    Не просто было, но после тщательного повтора все получилось как здесь. Нужно быть очень внимательными в этим делах (особенно для последних уроков #82 и #83). Это уже не совсем для новичков. Автор супер - почти на уровне Страструпа и к тому же на рус. с хорошей дикцией и красноречием. Здесь таких аналогов на рус. по плюсам пока нет.На этом фоне преподавание в уч. заведениях и в соц. на рус. по полюсам - полный отстой. Также респект автору за популяризацию современного оптимального стиля программирования.

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

      Это тема для новичков, даже я, новичок это понимаю

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

      Тема новичковая, начало ООП самое. Сложно будет дальше

  • @НиколайПокровский-р6в
    @НиколайПокровский-р6в 7 ปีที่แล้ว +8

    Спасибо за урок, как всегда) очень хочется по с# такие же уроки

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

      Пожалуйста! C# обязательно будет, но позже =)

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

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

  • @reginmozel8058
    @reginmozel8058 7 ปีที่แล้ว +11

    найс понятненько и просто

  • @TEHNOTRAHER
    @TEHNOTRAHER 6 ปีที่แล้ว +15

    можно в main инвертировать вот так :
    bool res = !(a == b);

  • @kpssnik9570
    @kpssnik9570 6 ปีที่แล้ว +74

    На многих роликах 0 дизлайков
    0 ничего не понявших школьников. Не может не радовать:)

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

      школьники до ооп не доходят

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

      вот дома сижу программирование учу, скоро курсы и чтобы не отставать заранее подучиваю (сеебался после 9, Батя сказал что в колледжах в ничему не научат и сказал учи дома и на курсы частные ходи) 2.5 года длительность на разработчика ПО

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

      появились ещё такие штуки как школа 21 в Москве ну и у нас UNIT Factory есть, лол.

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

      Круто пошел бы но я живу в Астане(страна Казахстан прямо под Россией) буду ходить на курсы в КомпАкадем ШАГ, почитал про 21-школу рилл круто то что принимают по навыкам и тестированию к тому же бесплатно, везет вам в Москве)

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

      @@naikvitlich1093 я в Киеве, но ваших у нас есть норм так, прикольные ребята, я в этом году поступил

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

    Большое спасибо вам за урок и прекрасное пояснение, Сергей!

  • @ДмитрийБузницкий-б3н
    @ДмитрийБузницкий-б3н 4 ปีที่แล้ว

    Спасибо, после предыдущих двух роликов это кажется легким!

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

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

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

    Перегрузил для класса мойкласс все получилось, спасибо за урок

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

    очень доступно и понятно! Просто супер

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

    как всегда лучший!

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

    Комментарий для продвижения. Спасибо

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

    Спасибо за урок! Спасибо за знания! Лайк, однозначно!

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

    Как мне кажется, оператор "не равно" реализован неправильно. Он будет выдавать true только в том случае, когда сразу и иксы, и игреки не равны. Но чтобы точки были разными, достаточно, чтобы либо x, либо y не совпадали. поэтому && стоило бы заменить на ||
    хотя это уже если придираться к смыслу. Спасибо за урок!

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

      Вообще можно было просто инвертировать результат вычисления оператора проверки на равенство (он ведь уже готов)
      return !(*this == other);

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

    Для массивов
    bool operator== (const myclass& other)
    {
    if (!(this->Size == other.Size))
    {
    return false;
    }

    for (int i = 0; i < this->Size; i++)
    {
    if (this->arr[i] == other.arr[i])
    {
    continue;
    }
    else
    {
    return false;
    }
    }
    return true;
    }

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

      можно сделать немного короче
      bool operator == (const MyClass& other) {
      if (Size != other.Size) return false;
      for (int i = 0; i < Size; i++) {
      if (data[i] != other.data[i]) return false;
      }
      return true;
      }

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

    Спасибо. Объяснение очень понятное.

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

    наконец-то урок который я полностью понял)

  • @АлександрВасильев-в1е
    @АлександрВасильев-в1е ปีที่แล้ว

    Спасибо за видео!

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

    В прошлых уроках разбирали перегрузку для динамически выделенных массивов, так что целесообразнее было показать перегрузку на примере этих же массивов.
    Кому нужно, вот часть кода для массивов:
    // перегрузка оператора ==
    bool operator == (const MyClass& other) {
    if (this->size != other.size) { return false; }
    else {
    for (int i = 0; i < other.size; i++) {
    if (this->data[i] != other.data[i]) {
    return false;
    }
    }
    }
    return true;
    }
    // перегрузка оператора !=
    bool operator != (const MyClass& other) {
    if (this->size != other.size) { return true; }
    else {
    for (int i = 0; i < other.size; i++) {
    if (this->data[i] != other.data[i]) {
    return true;
    }
    }
    }
    return false;
    }

  • @АлександрЛитвинюк-х2ы
    @АлександрЛитвинюк-х2ы 4 ปีที่แล้ว

    Спасибо за знания !

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

    А мне кажется, что в перегрузке оператора != лучше использовать ||, чем &&, ведь если одно поле первого будет равно полю второго, а другое поле не будет равно, то все равно выведется false. Но урок все равно отличный, как и все предыдущие и будущие. Спасибо большое!

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

      Не только тебе так кажется. think about it /(o_o)

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 ปีที่แล้ว

      @@nexusgaming1912 почему нельзя юзать ИЛИ ? Должно же работать....

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

    Очередное огромное спасибо

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

    Спасибо, очень сильно помог

  • @ВладиславФедун
    @ВладиславФедун 6 ปีที่แล้ว +3

    Ну это естественно лайк!)

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

    Спасибо

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

    Сергей вы лучший)

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

    Спасибо огромное!

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

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

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

    Если кто-то пишет перегрузку операторов == и != для класса MyClass и испытывает трудности, то вот вам готовые решения, я уже эти трудности испытал.
    1) Для оператора ==
    в классе:
    bool operator ==(MyClass const& s) {
    cout

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

      Если вспомнить как мы присваивали значения елементам масива то окажется что кроме проверки на размер больше ничево не нужно

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

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

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

      @@validdoll так вдруг элементы в массиве будут разные?

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

      @@hub945 Он там просто про цикл for забыл, он был в ==, но почему-то он забыл его написать в !=. Бывает

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

    Все четко!

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

    Спасибо!

  • @randomcraft2345
    @randomcraft2345 9 หลายเดือนก่อน

    Не знаю как люди понимают этот урок, но не понимают предыдущий... Лично я понял эту тему исключительно благодаря пониманию предыдущей. Если бы не пример с присваиванием, я бы до сих пор путался в порядке, какой объект this, левый или правый, а какой other. А так, теперь понимаю, что this - a. Фактически "a == b" == " a.operator==(b);", отсюда и понимание, что есть что (что есть this, а что является other).

  • @АнонимАнонимыч-х8ц
    @АнонимАнонимыч-х8ц 2 ปีที่แล้ว

    Спасибо!🥰

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

    А это работает при структурах(struct)???

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

    А вы можете организовать донаты, мне кажется многие бы поддержали ваш канал) я+

  • @ПетрикПьяточкин-ю1в
    @ПетрикПьяточкин-ю1в 5 ปีที่แล้ว +1

    5.35 - или очень тонкий тролль, или.. одно из двух..)))

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

    Кому интересна реализация оператора равенства для класса массива, вот как я его реализовал. Критику приветствую)
    bool operator == (ArrClass& other) {
    if (this->dataSize != other.dataSize) return false;
    for (int i = 0; i < dataSize; ++i) {
    if (data[i] == other.data[i]) continue;
    else return false;
    }
    return true;
    }

    • @ИгорьДементьев-и7м
      @ИгорьДементьев-и7м 2 ปีที่แล้ว +1

      только хотя бы вот так:
      bool operator == (ArrClass& other)
      {
      if (this->dataSize != other.dataSize) return false;
      for (int i = 0; i < dataSize; ++i)
      {
      (data[i] == other.data[i]) ? continue : return false;
      }
      return true;
      }
      а то читать невозможно...

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

    Великолепные уроки! Но есть вопрос.
    А почему не сделать так?
    bool operator ==(const Point &other) { return x == other.x && y == other.y; }
    bool operator !=(const Point &other) { return !operator==(other); }

    • @КамаПуля-э7д
      @КамаПуля-э7д 6 ปีที่แล้ว

      Так не получится потому что

    • @АндрейГ-ш8з
      @АндрейГ-ш8з 5 ปีที่แล้ว

      @@md.403 можете объяснить последний ваш абзац. Не очень понял ,что такое not_equal_1

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

      @@КамаПуля-э7д А ты уверен? Мне кажется, что ты немного(много) так ошибаешься, всё работает, челик забыл скобки, когда писал {return !(operator ==(other));}, после такого изменения всё заработало

    • @КамаПуля-э7д
      @КамаПуля-э7д 4 ปีที่แล้ว

      @@andreyvolkov3117 2 года прошло с того момента как я оставил комментарий, думаешь, я помню, о чем он был?

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

      @@КамаПуля-э7д ну, будут люди, так они хоть прочитают и поймут, что работает

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

    Шикарно

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

    питонячий вывод массива в консоль
    operator string()
    {
    string arr = "[";
    for (int i = 0; i < Size; i++)
    arr += to_string(data[i]) + ", ";
    if (Size == 0)
    arr += "]";
    else
    arr += "\b\b]";
    return arr;
    }

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

    Небольшой косяк на превью. Изображён оператор присваивания.

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

    Я думаю что в операторе != нужно && поменять на ||.Разве не так?Просто если x =other.x , а y!=other.y то он скажет , что они равны хотя это не так

    • @Влад-п3щ1н
      @Влад-п3щ1н 4 ปีที่แล้ว

      а ты гений оказывается

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

      Именно так, в видосе ошибка!

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

    А не проще ли не дублировать код при отрицательной проверке (!=)?
    Можно как вариант написать функцию проверки так:
    bool operator !=(const Point & other)
    {
    return !(*this == other);
    }

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

      Мне кажется это менее оптимизировано

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

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

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

    спасибо

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

    Почему указатель на массив в классе MyClass вы инициализируете в области public?

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

    Сергей, подскажите, пожалуйста, как лучше писать перегрузку оператора равенства? думаю между вашим вариантом и вот таким(через дружественную функцию делаю, так как операнды не изменяются):
    bool operator==(const Point &p1, const Point &p2)
    {
    return p1==p2;
    }
    и соответственно перегрузка оператора != будет
    bool operator!=(const Point &p1, const Point &p2)
    {
    return !(p1==p2);
    }

  • @AleksandrFastenko-u2m
    @AleksandrFastenko-u2m 2 ปีที่แล้ว

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

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

    ребят, обязательно ли смотреть стрим или можно пропустить?

  • @Alex-hs8xj
    @Alex-hs8xj 5 ปีที่แล้ว +3

    у меня возвращает true при любых значениях x, y, так и не нашел в чем косяк( хехе нашел ошибку случайно через несколько видео, конструктор принимающий значения x, y был пустой просто)

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

      в коде не равенства косяк в && и || ну и я бы написал так:
      bool operator !=(const Point & other)
      {
      return this->x != other.x || this->y != other.y;
      }

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

      А можешь сказать,как исправить, пожалуйста ?

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

      @@JTmartShturmannVideo нет косяка, есть такие законы логики - законы де Моргана. Один из них:
      !(a&&b)==!(a) || !(b) (только здесь == это тождественное равенство(например число Пи тождественно равно 3,14...., не логическое)
      У Сергея !(a&&b) , а у Вас !(a) || !(b) ;)

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

      @@coldproducer Он даже написал где ошибка, если тебе этого мало, то может программирование не твоё? Или может ты много уроков пропустил?

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

      А ты мог через SetX и SetY сделать, чтобы не заполнять конструктор

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

    Чтобы Я без Вас делал ? . Спасибо

  • @ЕгорИщенко-г9я
    @ЕгорИщенко-г9я 4 ปีที่แล้ว

    есть ли разница как получать значения this->x или this->GetX и если есть то какая? Или без разницы, можно и так и так?

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

    через cout

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

      не нужно перегружать, нужно скобки поставить std::cout

  • @ДенисЛюдской
    @ДенисЛюдской 4 ปีที่แล้ว

    есть небольшое непонимание почему нельзя сделать вот так:
    bool Point::operator!= (const Point& right)
    {
    return this->x != right.x && this->y != right.y;
    }
    при этом, оператор работает как логическое "или". но:
    bool Point::operator!= (const Point& right)
    {
    return this->x != right.x || this->y != right.y;
    }
    работает как положено.

    • @ДенисЛюдской
      @ДенисЛюдской 4 ปีที่แล้ว

      Кажется сам допер. Для решения без скобок и инвертирования всего выражения. Напишу, если кто задался вопросом: при сравнении одинаковых значений "Х" в левой части результат будет "0" и компилятор игнорирует правую часть, т.к. результат сравнения "0" с чем-либо даст "0", а поэтому необходимо проверять обе части выражения и использовать логическое "или" - "||".

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

    -ONE LESSON, +ONE PROFIT!

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

    Почему в this попала переменная а, в others попала переменная b?

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

      Наверное потому что изначально "a" сравнивается с "b"
      a == b? / a.operator==(b);
      Как вызывался бы и метод класса через обьект
      Поэтому для объекта a вызывается перегруженный оператор и в this это будет "a", а в other - "b"

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

    Спасибо за урок!
    Возник еще такой вопрос: если я хочу сравнить три переменные класса Point, то как мне это сделать? Мне не даст так просто при такой реализации написать например
    Point a(4, 2);
    Point b(4, 2);
    Point c(4, 3);
    bool result;
    result = a == b == c;
    Если с присваиванием прописали return *this, то тут так не получится, ведь здесь у нас перегрузка типа bool
    Мне кажется я чего-то недопонимаю...

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

      @@Petr-kh1lt Да, хорошее решение, спасибо)

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

      @@Petr-kh1lt Можно (a==b)==c

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

      @@sergeyandreev8709 видимо чел не даёт бесплатных уроков направо и налево, удалил коммент xd

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

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

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

    А как сравнивать сразу 3 объекта (a==b==c)?

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

      (a==b)==c или a==b && a==c

  • @ВладимирКалашников-ш2к
    @ВладимирКалашников-ш2к 5 ปีที่แล้ว

    Спасибо огромное за урок, все понятно) Но возник один вопрос: если у объекта по 100 полей, и я должен сравнивать по всем полям, то мне сравнение по каждому полю прописывать нужно?

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

    в питоне это магические методы)

  • @АртемКрылов-ж7г
    @АртемКрылов-ж7г 4 หลายเดือนก่อน

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

  • @ДониёрРахманов-ч1ю
    @ДониёрРахманов-ч1ю 4 ปีที่แล้ว +1

    Перегрузка операторов < и >
    #include
    #include
    using namespace std;
    class Point {
    public:
    Point(int x, int y) {
    this->x = x;
    this->y = y;
    }
    string operator < (const Point& other) {
    int thisVectrorLength = pow(this->x, 2) + pow(this->y, 2);
    int otherVectrorLength = pow(other.x, 2) + pow(other.y, 2);
    if (thisVectrorLength < otherVectrorLength) {
    return "true";
    }
    else return "false";
    }
    string operator > (const Point& other) {
    int thisVectrorLength = pow(this->x, 2) + pow(this->y, 2);
    int otherVectrorLength = pow(other.x, 2) + pow(other.y, 2);
    if (thisVectrorLength < otherVectrorLength) {
    return "false";
    }
    else return "true";
    }
    private:
    int x;
    int y;
    };
    int main() {
    Point a(1, 4);
    Point b(0, 2);
    string res = b < a;
    string res2 = b > a;
    cout

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

    А как сделать так с матрицей?

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

    А можно в операторе "не равно" написать "return !(this==other)"?

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

      Проверил, может кому пригодится)
      Вот так вроде работает " return !(this->operator==(other)); "

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 ปีที่แล้ว

      @@iVAtcg а еще можно И заменить на ИЛИ.

  • @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ
    @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ 5 ปีที่แล้ว

    Спсб

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

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

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

    up

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

    почему никто не пишет что можно было просто вызвать обычное сравнения и потом инвертировать результат, в видео обычное нарушения D.R.Y. а вот метод более красив и понятен:
    bool operator!=(const Point &other) { return !(*this == other); }

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

      нарушение сухова, лол

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

      а зачем здесь указатель?

    • @illiahimself
      @illiahimself 9 หลายเดือนก่อน

      @@sleepyNovember_project Ты разыменовываешь указатель и таким способом получаешь доступ к текущему объекту. Это то же самое, если бы была возможность писать this->object. Ты можешь получать доступ и к полям класса таким образом (*this).Size != other.Size вместо того, чтобы писать this->Size. Ну это так, для примера

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

      @@illiahimself это всё понятно, но я не понял, зачем конкретно здесь разименование целого объекта, то есть значит именно сравнивается по соответствию всех значений полей в объекте или как?

    • @illiahimself
      @illiahimself 9 หลายเดือนก่อน

      @@sleepyNovember_project у тебя есть перегруженный оператор "==" и этим ретурном ты заходишь в этот оператор и возвращаешь обратный результат в перегруженный оператор "!=". В операции this == other у тебя сравниваются указатель и ссылка на объект и ты не можешь производить такое сравнение (типа указателя и типа объекта), поэтому чтобы получить доступ к объекту и произвести их сравнение тебе нужно разыменовать указатель. Ну и после этого ты заходишь в оператор "==" и там производится сравнение по тому, какую логику ты там заложил

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

    10/10

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

    А почему это называется перегрузкой? Аналогии с перегрузкой конструктора или функций не вижу.

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

      Случайно наткнулся на Вики на статью про перегрузку, в ней говорится, что это "калька" с англ. overload.
      Т.е просто так перевели и используют.

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

    bool operator == (const Point& another) {
    return (this->x == another.x) && (this->y == another.y);
    }
    bool operator != (const Point& another) {
    return !(*this == another);
    }

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

    bool operator!=(const Point& other){
    return !(*this == other);
    }

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

      с динамической памятью такое не прокатит

  • @Fjnbbvhkkhhvcxo-ghj
    @Fjnbbvhkkhhvcxo-ghj 3 ปีที่แล้ว

    кому мб нужен код для реализации для класса MyClass:
    в private создаем int count = 0;
    bool operator==(const MyClass& other)
    {

    if (this->Size == other.Size)
    {
    for (int i = 0; i < other.Size; i++)
    {
    if (this->data[i] == other.data[i])
    count++;
    }
    }
    return count > 0 ? true : false;
    }
    код покажется топорным, но он работает и я сам до него додумался ;)

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

    Кто сможет решить эту задачу:21. Задача на взаимодействие между классами. Разработать систему «Интернет-магазин».
    Товаровед добавляет информацию о Товаре. Клиент делает и оплачивает Заказ на Товары.
    Товаровед регистрирует Продажу и может занести неплательщика в «черный список».

    • @ИгорьДементьев-и7м
      @ИгорьДементьев-и7м 2 ปีที่แล้ว

      Если можно создать массив объектов,то проблем вообще никаких нет.

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

      Сможете решить эту задачу?

    • @ИгорьДементьев-и7м
      @ИгорьДементьев-и7м 2 ปีที่แล้ว

      @@Nurdastg да,но какой мне в этом интерес?Там нужно делать примерно это,но чуть сложнее:
      MyClass arrMyClass[1]{};
      int var = 1,i = 0;
      arrMyClass[i].setValueA(var);

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

      @@ИгорьДементьев-и7м если вам заплачу,не можете?

    • @ИгорьДементьев-и7м
      @ИгорьДементьев-и7м 2 ปีที่แล้ว

      @@Nurdastg могу бесплатно,но без динамических массивов.Больно уж в лом мне с ними возиться.

  • @user-rw2mv
    @user-rw2mv 2 ปีที่แล้ว

    return !((x1-x2) + (y1 - y2));

    • @ОлегСизов-ф4б
      @ОлегСизов-ф4б 2 หลายเดือนก่อน

      Хочу предостеречь тех, кто попытается так сделать. Сравниваем Point(5, -2) и Point(-2, 5):
      x1 = 5, x2 = -2, y1 = -2, y2 = 5
      !((5 - (-2)) + ((-2) - 5)) = !(7 + (-7)) = !(0) = true
      Соответственно, Point(5, -2) = Point(-2, 5), что, очевидно, неверно. Все дело в том, что целочисленные операции не эквивалентны булевым.
      Если же сильно хочется, то можно выполнить следующее преобразование (любопытствующим - гуглить "законы де Моргана"): NOT (A OR B) = (NOT A) AND (NOT B). Таким образом, получаем выражение !(x1 - x2) && !(y1 - y2). Здесь выражения !(...) примут значение true только тогда, когда в скобках будет 0, т.е. соответствующие координаты равны между собой. Значение же всего выражения станет true только тогда, когда оба выражения !(...) тоже будут true, т.е. тогда, когда x1 = x2 и y1 = y2

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

    Я конечно понял как это работает, но применение не совсем осознал

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

      молодец, что как минимум понял, ведь ты расширил познания о программировании, и даже если это не понадобится тебе, то ты не зря потратил время. Н-р, на таких языках как C# такой проблемы нет, и ты будешь получить наслаждение от написания кода на нем, ведь ты знаешь, что как на самом деле это делать вручную. Понадобиться это может, если будешь делать какие-нибудь реальные проекты, грубо говоря, при обычном программировании я часто юзаю проверку на равенство переменных. Было бы странно, если бы данной нужды не было при использовании объектов).

  • @НиколайОвчинников-д6э
    @НиколайОвчинников-д6э 2 ปีที่แล้ว

    +

  • @ИльяЧековых-х9о
    @ИльяЧековых-х9о 4 ปีที่แล้ว +1

    поскольку я здесь хотелось бы передать
    #include
    using namespeace std;
    int main()
    {
    cout

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

    Страшна вырубай

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

    отсутствует оператор "==", соответствующий этим операндам

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

      отсутствует оператор "==", соответствующий этим операндам
      типы операндов: MyClass == MyClass

  • @АлександрЛейкин-т9п
    @АлександрЛейкин-т9п 2 ปีที่แล้ว

    прошло 3 года, теперь смотрим новички :)

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

    #include
    using namespace std;
    double max(double a,double b) {
    if (a >= b) {
    return a;
    }
    else { return b; }
    }
    class test
    {
    public:
    test(int size){
    this->Size = size;
    this->data = new int[size];
    for (int i = 0; i < size; i++)
    {
    data[i] = i;
    }
    cout data[i]) {
    continue;
    }
    else {
    return false;
    }
    }
    return true;
    }
    ~test() {
    cout

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

    Спасибо

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

    Спасибо!

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 ปีที่แล้ว +1

    спасибо

  • @АлександраАкчурина-я6ф
    @АлександраАкчурина-я6ф 7 หลายเดือนก่อน

    Спасибо!