Вложенные классы с++ пример. Внутренние классы. Зачем нужны. inner class. ООП. Для начинающих #95

Поділитися
Вставка
  • Опубліковано 17 гру 2024

КОМЕНТАРІ • 133

  • @noskov5
    @noskov5 Рік тому +31

    2023, Это все еще лучший курс по ++ на Ютубе, Сергей - ты лучший, Бро!

  • @Jessica_Cat-l1v
    @Jessica_Cat-l1v 9 місяців тому +9

    Огромная работа! Сергею огромная благодарность от учащихся из 2024 года👏👏👏

  • @ГеоргийБотнарь-к4ы
    @ГеоргийБотнарь-к4ы 7 років тому +157

    Спасибо что не сдаётесь,а продолжаете делать видео.

  • @shaxanematov8516
    @shaxanematov8516 7 років тому +71

    я нажимаю на лайк до того как смотрет ваши уроки))

    • @SimpleCodeIT
      @SimpleCodeIT  7 років тому +4

      Спасибо =)

    • @kaonari1161
      @kaonari1161 5 років тому +16

      Аналогично поступаю, потому что уверен ещё до начала видео в том что оно предоставит мне всю необходимую информацию по теме)

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +42

    Вложенные классы с++ пример. Внутренние классы. Зачем нужны. inner class. ООП. Для начинающих. Урок #95

    • @TheWladberlin
      @TheWladberlin 5 років тому

      Как-то мне синтаксис объявления массива объектов Pixel(rr,gg,bb) совершенно не понятен (5:30). Pixel - это класс! По логике получается какой-то Массив из классов "Pixel", а не объектов "pixels(0,4,64)..." Тоесть получается какой-то совершенно аллогичный синтаксис! Может кто ее видит? Сравнить, к примеру с массивом из "int"...
      Как правило, когда логика нарушена, каждый раз приходится просто тупо запоминать, что не есть особенно хорошо.
      Жаль, уроков на тему массива объектов не было, хотелось бы поподробнее. В том числе, как такой массив можно в цикле организовывать, то же не понятно, какая-то каша в голове получается.
      За урок, большое спасибо - без урока, сам бы такое не "наворотил" :))

    • @frosty7269
      @frosty7269 5 років тому +1

      Понимаю, что видео давнее, но я никак не могу понять, зачем нам static для LENGTH, даже когда я пишу [this->LENGTH], возникает ошибка, что "оператор this можно использовать только внутри нестатической функции-члена" и сама ошибка мне ясна, но мне не ясно, из-за чего она вылетает, где вызывается эта самая нестатическая функциия-член? В чем эта функция заключается?

    • @TheWladberlin
      @TheWladberlin 5 років тому +2

      @@frosty7269 Для этого тебе немного назад надо вернуться, урок #92.
      "this" - прямой доступ на внутренние, данного класса переменные.
      А static он для того и объявляется, чтобы быть общим для всех объектов класса, он становотся виден извне класса, т.е. он не является чисто внутренним, поэтому написание "[this->LENGTH]" ошибочно

    • @frosty7269
      @frosty7269 5 років тому

      @@TheWladberlin this->LENGTH я писал, когда ещё не было static у LENGTH, по идее, LENGTH должен был во всех объектах создаваться свой, а по тому мне и не ясна ошибка, связанная с this.

    • @ИгорьБуренин-в3я
      @ИгорьБуренин-в3я 5 років тому

      Кто нибудь может объяснить каким образом при создании объекта Image img; массив pixels типа Pixel попадает в конструктор ? Каким образом он туда передается ? Какая логика ? Спасибо.

  • @alexgaran5339
    @alexgaran5339 4 роки тому +10

    Для тех, у кого был ступор относительно "to_string" класса (ибо Сергей не объяснял функционал, можно представить функцию в виде void, слегка изменив ее:
    (image) public:
    void info() {
    cout

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +19

    #вложенныеклассы #внутренниеклассы #innerclass #ООП #SimpleCode #урокипрограммирования

  • @Ланс-м1в
    @Ланс-м1в 6 років тому +20

    Благодарю за уроки. Долго не был на Вашем канале, пытался читать учебник Павловской Т.А. для вузов (хотя бы домашние задания пригодились). Пора продолжить обучение и разобраться с классами. Рад, что канал развивается.

  • @ВладиславФедун
    @ВладиславФедун 6 років тому +15

    спасибо, вроде просто но нужно сесть самому написать все это и пройтись отладчиком.

  • @АлександрАлександров-ф8к4л

    Ты просто спаситель для студентов !

  • @СарханАбдуллаев-в7о
    @СарханАбдуллаев-в7о 7 місяців тому +1

    Самый крутой курс по с++

  • @delete_darling7101
    @delete_darling7101 5 років тому +44

    у Вас понятнее, чем на парах -_-

  • @vladalu9794
    @vladalu9794 6 років тому +13

    Спасибо бро, очень интересно, скилл растет!

  • @Ermine882
    @Ermine882 7 років тому +21

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

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 7 років тому +12

    Спасибо

  • @mykhailomorhal2181
    @mykhailomorhal2181 7 років тому +21

    Добре пояснена тема! Дякую)

  • @segars9604
    @segars9604 Рік тому

    Благодарю за бесценную работу!

  • @АндрейМиненко-ц3з
    @АндрейМиненко-ц3з 7 років тому +6

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

  • @sergeyinkognito7236
    @sergeyinkognito7236 5 років тому +7

    На 1 курсе универа было почему-то сложно учить ООП, но теперь с вашим каналом все изи)

  • @nurecom
    @nurecom 3 роки тому +1

    Cпасибо! Фоном музыка классная играет!

  • @sergeyinkognito7236
    @sergeyinkognito7236 5 років тому +1

    SimpleCode - название вашего канала отвечает действительности)

  • @Salavat1k
    @Salavat1k 5 років тому +4

    Прикольная матрешка получается:
    1) создать объект_1 внешнего класса_1, который использует метод_1, метод который:
    2) в цикле использует объект_2 внутреннего класса_2, класса который который спрятался за модификатором доступа private класса_1, и этот объект_2 использует метод, который обращается к приватным полям класса_2.
    Хороший пример иллюстрации контейнера.

  • @dekstor5657
    @dekstor5657 6 років тому +2

    Спасибо за ваши уроки, Сергей)!!!!

  • @AnnTimLeo
    @AnnTimLeo 5 років тому +2

    Замечательное видео! Огромное спасибо!

  • @Robogap
    @Robogap 3 роки тому

    Супер! Ваши уроки просто великолепны!

  • @Александр-й2в2о
    @Александр-й2в2о 4 місяці тому

    Ну тема будто интуитовно понятная хех!
    Круто!

  • @miroslavklyukovsky683
    @miroslavklyukovsky683 3 роки тому +1

    "Спасибо!!!"*100!

  • @DEKJ1000
    @DEKJ1000 4 роки тому +1

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

  • @ЯЗдесь-ъ5ф
    @ЯЗдесь-ъ5ф 6 років тому +2

    Интересно, спасибо!

  • @rearden3820
    @rearden3820 5 років тому +1

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

  • @анониманоним-г7ы
    @анониманоним-г7ы 2 роки тому

    огромное спасибо , еще когда смотрел уроки по классам хотел осуществить поиск по характеристикам объектов , теперь знаю огромное спасибо

  • @youjustillusion536
    @youjustillusion536 4 роки тому +1

    Отличный урок, благодарю автора!
    )

  • @АлександрЛитвинюк-х2ы

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

  • @flepjack
    @flepjack 3 роки тому

    Благодарю за урок)

  • @vor_pobed6108
    @vor_pobed6108 3 роки тому

    Спасибо за ваши уроки! Очень понятно :3

  • @HistorySchool18
    @HistorySchool18 5 років тому +7

    Спасибо за уроки! Вопрос: при использовании конструкции проекта с одним файлом все работает, но когда делаю с Image.h ( заголовочный объемлющий класс) то в Image.cpp когда начинаю делать массив возникают ошибки (я так понимаю связанные с областью видимости), в заголовочном класс указал, а при объявлении массива тоже ошибка! Подскажите как можно реализовать данный код с заголовочными файлами для класса?

  • @ИльяЯкобсон-ю7ж
    @ИльяЯкобсон-ю7ж 4 роки тому

    Отличный урок. Было бы очень здорово, если бы вы в этом уроке показали как отрисовать эти пиксели)

  • @ГусейнСалахов
    @ГусейнСалахов 4 роки тому

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

  • @vasiliypoopkeen7954
    @vasiliypoopkeen7954 Рік тому

    мне классы изначально были нужны для получения аналога функционального блока. Ну, сименс для домашнего пользования - дороговато, AVR долго паять/разводить, а ардуиновская платформа при осторожном использовании - в самый раз... А потом уже оказалось, что так можно сильно снизить ресурсопотребление.

  • @Ivan-Shyriaiev
    @Ivan-Shyriaiev 4 роки тому +1

    Объект класса в другом классе инициируется при помощи *{* значение *}* (изначально с помощью скобок ( ) пробовал)
    Сделал класс компьютер. Внутри него создал класс части. Внутри сделал 2 объекта: Монитор и батарея.
    Намутил метод для класса Компьютер.(Врубить комп),когда вызывается этот метод, Булиан переменные в Иннер классе меняются на true. Крууууть.
    Даже не представляю какие возможности откроются если посидеть и поковырять Классы в Классах Классов.....
    _Спасибо_ *большущее*
    #include
    #include
    #include
    #define cls system("cls")
    #define gtch _getch()
    using namespace std;
    class PC
    {
    public:
    void TurnOn()
    {
    screen.SwitchOn();
    battery.SwitchOn();
    }
    void TurnOff()
    {
    screen.SwitchOff();
    battery.SwitchOff();
    }
    void ShowPartCount()
    {
    cout

    • @саидалиев-м3л
      @саидалиев-м3л 2 роки тому

      а может вместо static int Count() , напишешь геттер static int GetCount() ?

  • @talesuleymanov4778
    @talesuleymanov4778 6 років тому +1

    Spasibo za Urok. Jdu ne dojdus uroki C# ocen nujni.

  • @ИванКозловский-ш9н

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

  • @Max-he9hl
    @Max-he9hl 2 роки тому +1

    Спасибо огромное за очередной качественный видео урок) Только вот я не понимаю одного момента: в прошлом уроке вы говорили, что статические переменные в плюсах нужно объявлять вне класса, но в этом уроке вы объявили переменную длины массива сразу при создании и все отлично работает(?). Пока листал все комментарии, на подобный не натыкался, так что решил спросить) Хорошего дня!

    • @Jeff-cn4sf
      @Jeff-cn4sf 2 роки тому

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

    • @zxcghoul8837
      @zxcghoul8837 2 роки тому +2

      @@Jeff-cn4sf c++ для лохов python Для мужиков ( и их мужиков тоже)

    • @AliF0Uen
      @AliF0Uen Рік тому +4

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

  • @Youtube-pomoyka
    @Youtube-pomoyka 4 роки тому +2

    Спасибо за урок. Вот только мой компилятор Dev-C++ 5.4.2 не воспринимает to_string и поэтому пришлось создать функцию void, которая через cout выводила данные о пикселях.

  • @xvostbobra
    @xvostbobra 7 місяців тому

    сложновато, но понятно)))

  • @maxpo801
    @maxpo801 3 роки тому +1

    Согласно теории в полях класса можно инициализировать лишь static const поля. Почему удалось инициализировать массив pixels?

  • @Ivan-Shyriaiev
    @Ivan-Shyriaiev 4 роки тому +1

    Сергей,спасибо *большое* за старания ! Топ уроки на ютубе.
    С каждым последующим видео (просмотры -= пару тыщ)
    Что будет на 150 видео... 3000 просмотров ?:(

    • @SaffronChipMCPE
      @SaffronChipMCPE 4 роки тому +2

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

  • @panschindler9370
    @panschindler9370 4 роки тому

    Спасибо, урок понял))

  • @mikesteinar2713
    @mikesteinar2713 4 роки тому +6

    to_string not working
    update: oh! I've forgot to include string library

  • @КонстантинФерафонтов-д3п

    Лайк👍

  • @maksimtkachenko9617
    @maksimtkachenko9617 7 років тому

    Подскажи пожалуйста!!! Мне нужно в Visual Studio 2017 написать код на языку Си. Я ставил компилировать на Си, вместо .срр ставил просто .с но не чего не получалось и мне выдавало ошибку в другом коде который уже бы при создание проекта. подскажи пожалуйста.

  • @alexflyer5728
    @alexflyer5728 3 роки тому

    Скажите пожалуйста Сергей, а может ли класс Image быть дружественным классу Pixel?
    И может ли Pixel работать с полями и методами Image.
    И ещё в функции main можно ли будет создать объект Image через класс Pixel ???
    Pixel::Image img;

  • @kaynsolo
    @kaynsolo 6 років тому +4

    В 12-й студии не создается массив пикселей(

    • @SimpleCodeIT
      @SimpleCodeIT  6 років тому +7

      12 студия давно устарела и не поддерживает новых стандартов принятых в С++ и других языках в новых версиях.

  • @KocTu4eK
    @KocTu4eK 3 роки тому

    по сути вложенным классом Pixel мы заменили неудобный двумерный массив

  • @misha4712
    @misha4712 7 років тому

    Здравствуйте, помогите пожалуйста решить задачу - Написать программу, которая создает текстовый файл Output.txt, содержащий все числа файла Input.txt, кратные 5, в порядке убывания. Язык - С++

  • @saidamir6538
    @saidamir6538 2 роки тому

    Почему класс Pixels нельзя было создать вне класса Image, а в Image сделать массив объектов внешнего класса? Это из за принципа инкапсуляции?
    Upd: а все, понял досмотрев видео

  • @exploserester6041
    @exploserester6041 3 роки тому

    Всем привет, 17 студия C2073, C3931, ругается на закрытие массива

  • @hrachyaandreasyan4239
    @hrachyaandreasyan4239 2 роки тому

    Я только не понялб почему размер массива статичесский?

  • @ЕвгенийОсипов-и1ч
    @ЕвгенийОсипов-и1ч 6 років тому +1

    Хорошие уроки, но куда подевались ссылки на код?

    • @СтарыйВаленок-к4л
      @СтарыйВаленок-к4л 4 роки тому

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

    • @ЕвгенийОсипов-и1ч
      @ЕвгенийОсипов-и1ч 4 роки тому

      @@СтарыйВаленок-к4л за 2 года уже всё изучил=)

    • @СтарыйВаленок-к4л
      @СтарыйВаленок-к4л 4 роки тому

      @@ЕвгенийОсипов-и1ч тогда предлагаю посмотреть ещё раз весь курс, всегда найдутся нюансы, на которые не заострил внимание. Должен признаться, сам многое знакомое стал пересматривать. И ещё любую хоть в доску понятную информацию, стоит рассматривать из разных источников. Автор канала(очень благодарен ему за его стиль) всё же хоть и очень грамотно, но не до конца всё расскрывает. Может некоторые вещи ему показались не существенными, но ты про них может и не слышал вовсе. В любом случае его стиль изложения материала мне импонирует, хотя повторюсь, надо смотреть и другие взгляды на теже вопросы.

    • @ЕвгенийОсипов-и1ч
      @ЕвгенийОсипов-и1ч 4 роки тому

      @@СтарыйВаленок-к4л да не актуально, стек другой, на flutter клепаю

    • @СтарыйВаленок-к4л
      @СтарыйВаленок-к4л 4 роки тому +1

      @@ЕвгенийОсипов-и1ч я занимаюсь в основном железками- микроконтроллерами, для меня это как повторение, но так как переходил с си, то встречаются для меня интересные ранее знакомые вещи,которые можно реализовать красивей.

  • @temshik.invalid
    @temshik.invalid 3 роки тому

    не понял логики массива пикселей:
    почему Pixel pixels [lenght] { Pixel(0,4,64) } a не {Pixel1(0,4,64)}
    название объектов же должны быть?

    • @azzzn-m8h
      @azzzn-m8h 3 роки тому

      потому что в массиве элементы и так являются уникальными и нам нужно только вызвать для них конструктор . Они и так уже можно считать пронумерованны от 0 до 4

    • @Alexey_Pe
      @Alexey_Pe 3 роки тому

      Int nums[4] { 2, 20, 30, 4 } - массив чисел
      В nums[0] лежит 2
      В нашем случае:
      Тип массива класс, а количество элементов в массиве - объекты класса. То есть в массиве уже есть объекты
      И для элементов массива(объектов) вызываешь конструктор

  • @FI4aTV
    @FI4aTV 6 років тому

    В 13 студии возникает ошибка c2536: невозможно инициализировать массив. Как её обойти?

    • @МаксимБобырь-й2л
      @МаксимБобырь-й2л 5 років тому

      такая же ошибка. Есть решение? Заранее благодарен.

    • @qymb4991
      @qymb4991 5 років тому +2

      @@МаксимБобырь-й2л установить vs 2017

  • @АлександраМуравьева-ы4л

    почему мы внутри класса пишем размер массива именно со статик ?static const int

    • @гений-ф2ч
      @гений-ф2ч Рік тому

      нельзя присвоить к переменной создаваемой в классе значение, только через конструктор или как здесь через static

  • @artemartem3375
    @artemartem3375 6 років тому +2

    для чего нужен static в строчке static const LENGTH=5; ?

    • @СправаФея
      @СправаФея 6 років тому +1

      не для чего,) если убрать const (и инициализировать вне класса, т.к. буит ошибка) - тогда есть смысл: можно было бы регулировать "размер изображений" перед созданием объекта этого класса "из вне", например из main(), =)

  • @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ

    Spsb

  • @UnifiedGod
    @UnifiedGod 5 років тому +4

    Не понятный синтаксис:
    чтобы создать объект класса Pixel, если он(класс Pixel) private:,
    в классе Image, надо писать так - Pixel rgb{2,3,4};
    а не Pixel rgb(2,3,4); - как обычно при создании объекта.

    • @serzhant7169
      @serzhant7169 4 роки тому +1

      нет, так писать не нужно, зачем нам нерабочий код?

    • @monkl1113
      @monkl1113 3 роки тому

      спасибо))

  • @wasony.126
    @wasony.126 4 роки тому

    Почему метод string???

  • @rustamibrahimli2113
    @rustamibrahimli2113 6 років тому

    Почему static const ,именно почему static ,а не просто const int LENGTH?

    • @rows5486
      @rows5486 6 років тому +4

      Static - говорит о том что это поле класса общее для всех объектов ( без static для каждого объекта выделялось бы отдельная ячейка памяти).

    • @vladportnov3041
      @vladportnov3041 5 років тому

      @@rows5486 ну и в чем проблема? Выделялось бы и пусть почему ошибка то выскакивает

    • @vladportnov3041
      @vladportnov3041 5 років тому

      @@rows5486 и не для каждого объекта а для каждой переменной length

  • @byaka8kaka
    @byaka8kaka 6 років тому +1

    +

  • @timurortskhanov8527
    @timurortskhanov8527 6 років тому

    Спасибо за урок. Если будет время ответье пожалуйста. Можно написать игу, ту же змейку или майнкрафт, без библиотек opengl и fsml?Надеюсь я правильно написал их названия. Если нет , то можно их встроить так, чтоб при создании проекта, не ставлять их каждый раз. Спасибо.

    • @alexmuzychuk5969
      @alexmuzychuk5969 6 років тому +1

      коли використовуєте SFML то вона і її залежності автоматично додаються в ваш додаток, це робиться для того, щоб ваш додаток можна було запустити на іному комп'ютері де не встановлена SFML.

    • @timurortskhanov8527
      @timurortskhanov8527 6 років тому

      Олександр Музичук Спасибо. Т.е SFML это получается не библиотека а вспомогательная программа, задача которой совсем другое?

  • @ПростоМакс-д7х
    @ПростоМакс-д7х Рік тому

    Прыжки туда сюда, как в сказке как успеть за мыслью

    • @lucifernus2276
      @lucifernus2276 10 місяців тому +3

      Все понятно, просто надо самому тоже изучать. И все уроки смотреть

  • @яонанист-в3ш
    @яонанист-в3ш 4 роки тому

    привэйт вроде

  • @chopik612
    @chopik612 3 роки тому +1

    А нельзя обойтись структурой и функцией? тогда и никаких вложенных классов не потребуется

    • @777noob777saibot
      @777noob777saibot 3 роки тому

      Я думаю можно и без внутреннего класса в данном случае. Просто создать приватную функцию Pixel и приватный массив Pixels. Смысл применения внутренних классов наверно более глубокий, такой что без них обойтись невозможно. Предположим есть класс конвертирующий валюту и в нём есть поле являющееся ссылкой некого класса Money....ещё в нём есть классы Dollar и Euro которые хранят данные о цене доллара и Евро, конвертируют в рубли и возвращают в объекте Money .

  • @legis7869
    @legis7869 11 місяців тому

    я вот одно не пойму как вообще допускается создание массива хотя он обьект класса Pixel? да ещё и его элементы это обьекты класса Pixel НО при этом у них нет названия. КАК так?? у них передаются данные для инициализатора а вот сам массив не понятно.. он ведь такой же обьект класса Pixel но вообще живёт своей жизнью без параметров
    Pixel pixels[LENGTH]
    {
    Pixel(0, 4, 64),
    Pixel(45, 46, 4),
    Pixel(90, 1, 70),
    Pixel(2, 56, 24),
    Pixel(33, 5, 99),
    };
    умоляю обьясните

    • @sleepyNovember_project
      @sleepyNovember_project 8 місяців тому

      😂 хз, ну, коробка с объектами у которых вместо имён индексы

    • @hopskops6136
      @hopskops6136 4 місяці тому

      Просто массив объектов Pixel. Вот обычный массив объектов int:
      int arr[5]
      {
      int(4),
      int(33),
      int(45),
      int(7),
      int(1),
      };

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 7 років тому

    up

  • @bohdankravchuk4396
    @bohdankravchuk4396 4 роки тому

    У меня не работает код. Напишите пожалуйста кто читает этот коммент и знает в чем дело

  • @МихаилСтариков-т9ч

    Зачем Вы учите быдлокоду: чтобы инициализировать объект Pixel надо написать конструктор Pixel(int r,int g,int b):r(r),g(g),b(b){} - всё!. Всё уже придумали за нас!

    • @ramozxd6564
      @ramozxd6564 Рік тому +2

      При чём тут быдлокод?Код должен быть легко читаемым.Код считается хорошим, если да же новичок взглянув на него сумеет понять что в нём происходит.То, что вы написали, а конкретно: Pixel(int r,int g,int b):r(r),g(g),b(b){} может быть не всем понятно.По вашему код считается лучше если мы уродуем и ужимаем его?
      Так что, в данном случае можно поспорить, что является быдлокодом...

    • @МихаилСтариков-т9ч
      @МихаилСтариков-т9ч Рік тому

      @@ramozxd6564 Что понятнее и очевиднее Pixel(int r,int g,int b):r(r),g(g),b(b){} или то,что написал автор, мне кажется ответ очевидным.

    • @Лев-й7я
      @Лев-й7я 6 місяців тому

      ​@user-pn6лучше ефторob5lw9u

  • @pavelios3577
    @pavelios3577 6 років тому +8

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

  • @Evgeny..
    @Evgeny.. 4 роки тому

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

  • @ЯрославГоловко-ф6и

    спасибо

  • @bama2619
    @bama2619 3 роки тому

    Спасибо

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 роки тому

    спасибо