Не знаю почему, но очень улыбнула фраза: "посмотрим какие ID у наших яблок";) Сразу представляется офис яблок с пейджиками, и базы данных с их зарплатами. Спасибо за уроки Сергей!
Вот это хобби! Это С++ шедевр, а не хобби. Немного жаль, что для C# пока немного аналогичных уроков. Но подожду т. к. это стоит того. Конечно это гигантская и длительная работа. Это не совсем стандартные базовые уроки для начинающих (как у всех других здесь). Это исследования различных возможностей языка С++ на более глубоком уровне (для тех, кто желает реально изучить этот непростой язык).
Спасибо за понятное объяснение. Хотелось бы добавить. 1) В статик методах класса можно работать только с статик переменными этого класса, в не статик методах класса можно работать со статик переменными класса. 2) Вы объявили private static переменную в классе и потом после его описания инициализировали переменную. Я работаю в Qt Creator и хотелось бы добавить что компилятор таким способом выдаёт ошибку что переменная приватная. Нужно было объявить отдельно класс Aplle с двумя файлами Apple.h и Apple.cpp, заголовочный файл и файл реализации. Так вот инициализация приватной статик переменной происходит в файле реализации.
Думаю про статические данные нужно рассказывать пораньше, т.к я как раз про них и думал когда начинал изучать ооп. Я считал что у всех объектов класса просто общие поля и методы. Это как другая точка зрения помогающая сразу понять что из себя представляют классы.
На самом деле да! В начале реально конфуз, а когда понимаешь что к примеру поля не общие, в голову сразу лезет концепция о том что наверное можно создать общее поле для всех объектов :\
Для такого статического метода как static void ChangeColor(Apple &apple, std::string _color) можно также вызвать его через один объект, а поменять цвет у другого: apple_1.ChangeColor(apple_3, "red"); - поменяет цвет третьему яблоку. Не знаю насколько это полезно, просто мое наблюдение)
Считаю что надо вообще запретить вызов статик методов через объект, проходил практику, видел норм прогеров, никто так не делает. Обращаются чисто через класс а не объект к статикам. Иначе это может запутать
Сначала скачал книгу спп за 21 дня. Потом нашел твой канал. И такое ощущение что смотря твои видосы можно освоить информацию с той же книги за более короткие сроки:D Спасибо
@@VideoEffekts , согласен. Тоже сначала учил теорию с минимальным количеством практики. Поэтому больше практики по пройденному материалу и всё будет окей)
@@wasony.126 Ну я изучил ООП. Что такое объект класса. Инкапсуляцию. Наследование. Полиморфизм. Понял впринципе что такое функция ( я ради этого и начал смотреть, потому что в техникуме меня обучили только basic и delphy). Перегрузку понял, но вроде стл библиотека сама перегружает не помню. Я пока не смотрю стл мне диплом нужно делать, некогда.
Передавая ссылку на объект в статик метод мы буквально отменяем то что мы неявно запретили словом статик. Статик просто убирает первый неявный аргумент *this.
Хм, выходит суть полей static В том что это типа по факту обычные переменные :| Ну типа поле не привязанное к конкретному объекту, и также с методами статик :| Для простоты буду считать что инициализация вне класса, полей статик Является указанием на то что его значение не принадлежит ни одному из объектов \._./ Методы статик тоже классная штука как вижу хех)) Ну типа вызывается вне зависимости объекта... То есть представка static Обозначает независимость от объекта.. При этом поля/методы статик все ещё являются частью класса :| Типа да короче
Объявление переменной или функции как static (вне класса или структуры), делает их доступными только в том файле, в котором они написаны и больше нигде P.S. относится к «.cpp» Это можно легко проверить: Сначала в проекте создать 2 .cpp файла, написать в них абсолютно одинаковые функции/переменные и попробовать скомпилировать проект, должна быть ошибка. Если же приписать к одной из функций/переменных "static", то ошибки уже быть не должно
Переписал код с видео один в один, но компилятор выдаёт ошибку LNK2001 "Неразрешённый внешний символ private:static int Apple::count (? count@Apple@@0HA" Если закомментировать строки с переменной count в конструкторе, то ошибка исчезает. Что это может быть?
В общем получается, static к static'у динамику с динамике, но как всегда не все так просто. p.s Спасибо за уроки, сижу с 72 ибо начальные знания были. Прекрасный канал, прекрасное объяснение. Очень радует что как только я начинаю задаваться вопросом, то почти сразу на него получаю ответ.
Убралось эта ошибка и сообщение и всё заработало, только после вставки: int Apple::Count = 0; Но мы же хотели убрать эту инициализацию!? Пойду дальше разбираться...
Уважаемый uRDy, может ты подскажешь, почему же после переноса в поле private static int Count, мы всё равно можем эту переменную изменять в int Apple::Count = 10? И вообще, что же это за private, если все переменные можно видеть и менять их через Apple::?!
В данном случае не видно разницы, а так в методе set могла бы быть какая-нибудь проверка, которая позволяла бы присвоить переменной color только существующие цвета, чего нельзя будет сделать, если переменная будет просто public и тогда переменной можно было бы присвоить любой мусор. Тем не менее, даже в таких случаях стоит помещать переменную в private и создавать для неё get set, чтобы сразу привыкать писать грамотно
Статический метод - функция, которую можно использовать, не создавая объект(переменную/константу и т.д.) и которая вообще не привязывается к объекту, через который её так же можно вызвать. Дружественная функция - функция, которая видит приватные/защищённые поля класса. Дружественный метод - функция, принадлежащая другому классу, которая видит поля первого класса.
Благодарность Сергею из 2024!🤓
+
Инкрементирую) ++
Префиксно инкрементирую
Не знаю почему, но очень улыбнула фраза: "посмотрим какие ID у наших яблок";) Сразу представляется офис яблок с пейджиками, и базы данных с их зарплатами.
Спасибо за уроки Сергей!
ты сумасшедший просто ,забей
@@イリアポリャン好木 xtk
@@イリアポリャン好木 kjk xtk jy gj ghbrjke crfpfk
Секретная лаборатория айпл)
Сергей, огромное спасибо за уроки! Продолжай в том же духе))) Всегда смотрю вашы уроки...
Пожалуйста!
ваши*
@@_Yes_. Ваши*
@@raskyagopota3879 чел иди лучше русский язвк выйчи
@@raskyagopota3879 чел иди лучше русский язвк выйчи
Вот это хобби! Это С++ шедевр, а не хобби. Немного жаль, что для C# пока немного аналогичных уроков. Но подожду т. к. это стоит того. Конечно это гигантская и длительная работа. Это не совсем стандартные базовые уроки для начинающих (как у всех других здесь). Это исследования различных возможностей языка С++ на более глубоком уровне (для тех, кто желает реально изучить этот непростой язык).
согласен с тобой, я бы врятли понимал всё это, если бы не эти уроки~
@@SaffronChipMCPE тпрваимоаукшщп3туащшдлуокпекирнркеолнгкуелнгглневагпб
@@_Yes_.?
@@_Yes_. нет, я считаю, что фывзкпоешвкзшпноывещшзровещзшрноыщешну58еку8шекузщеу4з9
@@SaffronChipMCPE меня мама к компу прижала
Получается комментарий под этим видео. Это сеттер к обекту Урок#94 класса Основы C++.
Основы_С++.урок#94.SetComment("Спасибо Сергей за видео!
");
#cтатическиеметоды #ООП #SimpleCode #урокипрограммирования
ахрененно!!!!!!!! Сергей не устану повторять! Лучший
Спасибо за урок!
Зашел чтобы узнать - где используются статические методы и переменные. Узнал, спасибо, урок очень качественный.
Спасибо за бесценную работу!
все понятно!!! спасибо
Круто!Спасибо!
Я уже устал писать спасибо) Но не перестану!)
Спасибо за понятное объяснение. Хотелось бы добавить.
1) В статик методах класса можно работать только с статик переменными этого класса, в не статик методах класса можно работать со статик переменными класса.
2) Вы объявили private static переменную в классе и потом после его описания инициализировали переменную. Я работаю в Qt Creator и хотелось бы добавить что компилятор таким способом выдаёт ошибку что переменная приватная. Нужно было объявить отдельно класс Aplle с двумя файлами Apple.h и Apple.cpp, заголовочный файл и файл реализации. Так вот инициализация приватной статик переменной происходит в файле реализации.
можете подробнее описать что делать? не понимаю(
вообще-то 1) он рассказал 12:50, невнимательно смотрел
Спасибо огромное. На мой взгляд обращаться к методу статическим способом куда более удобнее
Ты просто лучший!! Люблю тебя!)!)!)!!
Спасибо за твой труд!
Спасибо за знания!
спасибо Вам.
круто!!!
Как всегда отличный урок. Благодарю !) Только после этих уроков лучше понимаешь книги или других авторов ))
привет из 2023. Спасибо большое за уроки!
Поздравляю, дамы и господа. Мы перешли на новый уровень: теперь надписи в Paint делаются не "от руки", а используя функцию Text ))
Да, сложная тема, особенно под конец видео. Пересмотрел 2 раза и, наверное, надо бы ещё потом.
Думаю про статические данные нужно рассказывать пораньше, т.к я как раз про них и думал когда начинал изучать ооп. Я считал что у всех объектов класса просто общие поля и методы. Это как другая точка зрения помогающая сразу понять что из себя представляют классы.
На самом деле да!
В начале реально конфуз, а когда понимаешь что к примеру поля не общие, в голову сразу лезет концепция о том что наверное можно создать общее поле для всех объектов :\
просто, класс.
Спасибо!
Ахах, мало стойких людей осталось к этому уроку) Что-же на 190м?)
@Dealer Studio Я думаю так многие сделали (я в том числе)
@Dealer Studio Какие программки?
@Dealer Studio на фрилансе где то работаешь? Долго плюсы изучал?
Вопрос в поставленных задачах, чем дальше тем более профильные вопросы разбираются, которые многим и не нужны.
У тебя комментарии полистать твоей фамилии.... Не стыдно?
Спасибо)
Для такого статического метода как static void ChangeColor(Apple &apple, std::string _color) можно также вызвать его через один объект, а поменять цвет у другого: apple_1.ChangeColor(apple_3, "red"); - поменяет цвет третьему яблоку. Не знаю насколько это полезно, просто мое наблюдение)
Считаю что надо вообще запретить вызов статик методов через объект, проходил практику, видел норм прогеров, никто так не делает. Обращаются чисто через класс а не объект к статикам. Иначе это может запутать
@@doctor_livsi_pod_phonk к этому придет любой нормальный прогер
спасибо
+
В 22 году спокойно засунул статик переменную в приват, все работает
Ты в глаза долбился когда ролик смарел ._.
Спасибо огромное
Поддерживаю
Сначала скачал книгу спп за 21 дня. Потом нашел твой канал. И такое ощущение что смотря твои видосы можно освоить информацию с той же книги за более короткие сроки:D Спасибо
Хм.. у меня скорость освоения очередного урока заметно поубавилась, пропорционально номеру :))
месяц назад я тоже плохо усваивал, хотя все знал теоретический. Нужна практика и понимание приходит лучше.
@@VideoEffekts , согласен. Тоже сначала учил теорию с минимальным количеством практики. Поэтому больше практики по пройденному материалу и всё будет окей)
Уроки огонь=)
Посмотрел 90 уроков за 3 дня. Пожалуй нужно делать перерывы)
За 3 дня 😂😂😂
И что ты понял
@@wasony.126 За 4 дня я изучил весь язык. Кроме нововведений. И естественно библиотек.
@@wasony.126 Ну я изучил ООП. Что такое объект класса. Инкапсуляцию. Наследование. Полиморфизм. Понял впринципе что такое функция ( я ради этого и начал смотреть, потому что в техникуме меня обучили только basic и delphy). Перегрузку понял, но вроде стл библиотека сама перегружает не помню. Я пока не смотрю стл мне диплом нужно делать, некогда.
@@wasony.126 Указатели ещё и ссылки там были.
11:42 when method is sus
Мем, який зрозуміли в 2021))
супер!
Передавая ссылку на объект в статик метод мы буквально отменяем то что мы неявно запретили словом статик. Статик просто убирает первый неявный аргумент *this.
Заранее спрашиваю, подскажите как дальше развиваться после окончания этого плейлиста?
👍👍👍👍👍
Спсб
Хм, выходит суть полей static
В том что это типа по факту обычные переменные :|
Ну типа поле не привязанное к конкретному объекту, и также с методами статик :|
Для простоты буду считать что инициализация вне класса, полей статик
Является указанием на то что его значение не принадлежит ни одному из объектов \._./
Методы статик тоже классная штука как вижу хех))
Ну типа вызывается вне зависимости объекта...
То есть представка static
Обозначает независимость от объекта.. При этом поля/методы статик все ещё являются частью класса :|
Типа да короче
Вопрос, возможно, глупый, но можно ли перегрузить метод «ChangeCollor» (в данном примере) и в виде статического, и не статического?
наверно имелось ввиду не "единственная", а "единая"?
Про метод понятно. А я видел, что просто функции с модификатором static объявляется без какого либо класса. Не подскажете зачем это делается?
Объявление переменной или функции как static (вне класса или структуры), делает их доступными только в том файле, в котором они написаны и больше нигде
P.S. относится к «.cpp»
Это можно легко проверить:
Сначала в проекте создать 2 .cpp файла, написать в них абсолютно одинаковые функции/переменные и попробовать скомпилировать проект, должна быть ошибка. Если же приписать к одной из функций/переменных "static", то ошибки уже быть не должно
Переписал код с видео один в один, но компилятор выдаёт ошибку LNK2001 "Неразрешённый внешний символ private:static int Apple::count (? count@Apple@@0HA" Если закомментировать строки с переменной count в конструкторе, то ошибка исчезает. Что это может быть?
Вне класса инициализируй пременную Count .
В общем получается, static к static'у динамику с динамике, но как всегда не все так просто.
p.s Спасибо за уроки, сижу с 72 ибо начальные знания были. Прекрасный канал, прекрасное объяснение. Очень радует что как только я начинаю задаваться вопросом, то почти сразу на него получаю ответ.
Понятно, но если бы класс и экземпляр класса имели разные идентификаторы было бы яснее.
Уважаемый Сергей, уважаемый народ! Что за беда, выскакивает при компиляции : неразрешённый символ, ошибка LNK 2001 ""private:static int Apple::Count" (? Count@Apple@@0HA).
Убралось эта ошибка и сообщение и всё заработало, только после вставки: int Apple::Count = 0; Но мы же хотели убрать эту инициализацию!? Пойду дальше разбираться...
Я только учусь, но кажись может быть как параметр static так и метод. ( static int atatic blabla())
Немного непонятно зачем вообще нужны static функции, если им в принимаемые параметры все равно прийдется передавать экземпляры классов...
А может класс состоять только из функций?
11:44 when lesson is SUS
Как я понял смысл в етом методе есть только тогда когда нужно взаимодействовать с static переменными в private и то в случае когда нет объектов
Смысл static метода заключается в том же, в чём и смысла static поля. Работать с ним можно без экземпляра класса и он общий для всех объектов класса.
Уважаемый uRDy, может ты подскажешь, почему же после переноса в поле private static int Count, мы всё равно можем эту переменную изменять в int Apple::Count = 10? И вообще, что же это за private, если все переменные можно видеть и менять их через Apple::?!
он меняет её не в main. То есть в теле программы ты изменить её не сможешь.
можно не статическими методами работать со статическими переменными ?
да, это и происходит в конструкторе Apple
Не очень понятно, зачем тогда делать color приватным, если мы задаем функцию, разрешающую менять цвет?
В данном случае не видно разницы, а так в методе set могла бы быть какая-нибудь проверка, которая позволяла бы присвоить переменной color только существующие цвета, чего нельзя будет сделать, если переменная будет просто public и тогда переменной можно было бы присвоить любой мусор. Тем не менее, даже в таких случаях стоит помещать переменную в private и создавать для неё get set, чтобы сразу привыкать писать грамотно
Это одна из парадигм ООП - инкапсуляция. Посмотрите вводный в ООП урок на этом канале. Там про это на понятном языке.
о, а я под прошлым уроком догадался что тут проблема в отсутствии инкапсуляции ха ха
👍
получается, что статический метод - это тоже самое, что и дружественная функция?
Статический метод - функция, которую можно использовать, не создавая объект(переменную/константу и т.д.) и которая вообще не привязывается к объекту, через который её так же можно вызвать. Дружественная функция - функция, которая видит приватные/защищённые поля класса. Дружественный метод - функция, принадлежащая другому классу, которая видит поля первого класса.
спасибо
@@gloomyfoodeater7408 Идеально ответил
на скорости 1.5 так же хорошо воспринимать
всем советую
а сам класс статическим сделать можно? или это бред)
А можно было вообще написать: id = Count++; и инициализировать Count как int Apple::Count = 1;
Костыль уже какой-то, и становится менее читабельно
up
+++++
Спасибо за урок.
Спасибо!!!!
Спасибо!