С++ 4.2. Приведение типов. ООП: Классы и структуры.

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ม.ค. 2025

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

  • @mihail8159
    @mihail8159 5 หลายเดือนก่อน

    😍😍😍😍😍Спасибо
    👍👍👍👍👍👍👍👍

  • @КириллДанильчук-л5щ
    @КириллДанильчук-л5щ 4 ปีที่แล้ว +6

    34:34 (Можно явно создать указатель на нужную версию функции и вызвать её с параметрами, такое встречается на практике в Qt (у меня), для выбора нужной версии слота)
    void f(int&) { std::cout

    • @КириллДанильчук-л5щ
      @КириллДанильчук-л5щ 4 ปีที่แล้ว

      @@mesyarik Просто неявный каст, вообще можно написать так: auto ptr = static_cast(&f);

    • @КириллДанильчук-л5щ
      @КириллДанильчук-л5щ 4 ปีที่แล้ว

      @@mesyarik Там даже есть ещё одна проблема, где можно данным способом решить, а что если я заведу указатель на функцию f у которой 2 перегрузки, одна от int, а вторая от std::vector, какой адрес он должен поместить в указатель? Там тоже нужен явный тип или каст, нельзя будет написать auto ptr = &f;

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

      @@mesyarik Илья, привет! Мне кажется, что соль в том, что все исходит из языка Си, в котором указатели на функции являются типизированными в том смысле, что при их описании необходимо указывать профиль функции. Это является плюшевой абстракцией в том смысле, что компилятору необходимо знать, с какого рода функциями он может работать ( помнить адрес в данной переменной - указателе ) требовать кол-во аргументов, расправляться ретёрн-вэлью.
      Теперь в бой вступает декорирование имён функций. Выбрать явно необходимую функцию компил не может без контекста, а контекст для неявного каста укажет тип лвэлью. В этом мы можем убедиться, написав выражение &f; - напишет, что ему неочевидно. ( если функция имеет не один профиль ). Выход - кастовать. Если у функции нет перегрузок, то компил вполне удачно выведет тип указателя на функции с тем же auto.
      То есть, как я это понимаю, это наследие языка Си . И вполне логичное для компилятора. Указатель требует лишь "подчинения" профилю - это и является "типом указателя функции".
      Вот пример кода:
      #include
      void f(int&) { std::cout

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

      Липман, "Язык программирования Си++, базовый курс", у меня стр. 323, "Указатели на перегруженные функции", "...Компилятор использует тип указателя для выявления используемой версии перегруженной функции. Тип указателя должен точно соответствовать одной из версий .."
      P.S. Я когда читал, вообще на это внимание не обратил, а сейчас понял - оказывается актуальный вопрос!

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

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

    • @Sergey-mq3ol
      @Sergey-mq3ol 2 ปีที่แล้ว

      не сомневался что в комментах найдется тот кто все знает

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

      Бред.

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

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

  • @mihail8159
    @mihail8159 5 หลายเดือนก่อน

    cout