Сергей спасибо большое ! Нигде не видел более толковых и структурированых уроков ! Большой плюс за старания ;) Навалял с полученными знаниями чёто типа запуска двигателя машины. #include #include #include #include #define cls system("cls") #define gtch _getch() #define DEBUG using namespace std; //Инкапсуляция на примере заведения двигателя машины void ColorText(int color); class Car { private: int Fuel; string CarType; bool EngineWorking; bool CheckFuel() { if (Fuel > 0) return true; else return false; } void StartCarEngine() { if (EngineWorking) { cout
"Знание объекта о том, где он в памяти находится" Объект сам себя осознаёт и рано или поздно просто откажется участвовать в вашей программе, уйдёт в сеть, будет самообучаться и захватит мир :)
Перебрал много разных уроков, сперва остановился на уроках Гоши Дударя, но потом перешёл сюда. Лучше заходит, подробнее объясняет, почти нет вопросов, а если они есть - в новых видео получаю ответы. Спасибо автору за проделанную работу, продолжай в том же духе, у тебя получается. И, как уже заметили многие в коментах, почему так мало лайков? Контент то годный. ИМХО лучший среди русскоязычных.
Я тебя удивлю , но у Сереги в отличие от дудоря все работает, и не надо править кучу ошибок и дополнений, если посмотрите его уроки по движкам, то поймете о чем я.
Свет знаний, который вы пролили, слепит мне глаза до дикой боли! Огромное спасибо! Много раз пытался понять, что такое this и для чего оно нужно. ))) Понял только сейчас.
Странно что с такими обширными и подробными уроками, оставаться с таким рейтингом, я готов проставить лайк на все твой уроки по срр, за тот труд который ты делаешь для нас)) надеюсь что будущем я тоже помогу тебе. (извините за мой бедный русский язык :3 )
Пхаххахахах Прикиньте древних богов которые придумывали ООП и писали код для него... Ключевые слова, операторы разные... Типа того.... Господи... Я задумываюсь о том что 100% есть чувак который условно говоря с 80-х годов сидит и выкупает не только работу системы, но и как и на чем написаны языки.... И прочее бля
3:00 Насколько я понял, поэкспериментировав с кодом и отладчиком, все переменные, в том числе переменные, ссылающиеся на объекты класса, это по сути и есть ссылки. То есть переменная тождественно равна ссылке. Объявление переменной - это по сути соглашение с компилятором о том, что литерал при компиляции будет превращен в адрес, т.е. переменная есть литерал адреса той области памяти, где лежит значение этой переменной. А указатель есть переменная( а значит тоже ссылка -соглашение), значение которой есть адрес, по которому, в свою очередь, располагается область памяти, в которой записаны данные. Так вот, переменная объекта класса Point это литерал адреса, по которому располагается область памяти, в которой записаны поля класса. Никаких методов класса там нет, т.к. они все общие для всех объектов класса, они хранятся отдельно, предположительно в статической области, где инициализирован класс. Ключевое слово this - это указатель на объект, т.е. хранит только адрес области памяти, где физически располагается объект. Причем сам объект не хранит в своей области памяти указатель this, т.к нет необходимости через объект получать указатель this, ведь этот указатель можно взять и создать из адреса объекта.
Благодарю! Прохожу твой курс с самого начала. Что-то я уже знал а так же много чего упустил. Подробности с твоей стороны очень полезны. Твой пример с игриками демонстрирует так званное Перекрытие. О нем тоже следует рассказать.
Это удобно! Можно в функции не писать такую фигню по типу x = x1, или y = y1, а сразу и по делу писать x или y (скорее всего есть и круче способы применения слова this, но на данный момент для меня это единственный и самый полезный способ)))
Проблему с указателем this можно решить, если сделать так, чтобы не было совпадений между переменными в заголовке функции и в полях класса. К примеру, если в private полях класса объявить координаты как _x и _y, то тогда они не совпадут с x и y, которые находятся в шапке метода. (Поправьте, если ошибаюсь)
На практике как раз применяют одинаковые литералы параметров и полей, это более наглядно для восприятия кода, да и практичнее, а this это очень удобная конструкция, которая помогает избежать запутанности и, если потребуется, обратиться к экземпляру класса, находясь внутри класса.
@@verbof2527 На практике часто применяют нотацию с префиксами. Что бы имена данны-членов отличались от прочих имен. И вот это действительно наглядно и практично. А вот если члены-данные и прочие переменные внешне никак не отличаются, это уже не очень практично.
#SimpleCode, объясните пожалуйста, в чем разница между двумя операторами a.b и a->b. Я понял, что в одном случае выбор элемента по ссылке, а в другом по указателю.
Если заглянуть на статью с операторами в С и С++, то там будет написано так: a->b --- Structure dereference ("member b of object pointed to by a") a.b --- Structure reference ("member b of object a") То есть первое это "Элемент b объекта, на который УКАЗЫВАЕТ a", а второе - "Элемент b объекта a". То есть в первом случае, мы обращаемся к указателю на объект и просим его использовать поле b этого объекта. А во втором мы обращаемся непосредственно к объекту. Поскольку this - это указатель на объект, то мы и используем первый вариант.
Для с++ 2017 "this.", а для ранних версий "this ->". Сразу напрашивается "#define this. this->". Не знаю рабочий ли это макрос, все смотрю уроки и никак не соберусь установить эту громадину Visual Studio.
Проверил. Компилятор напрочь отказывается принимать точку в аргументе #define. Много всего перечитал по этому поводу, похоже так нельзя реализовать. Жать, что не придумали что-то вроде экранирования точек или объединения в кавычки для аргументов макросов.
Язык не разрешает переопределять ключевые слова языка. В случае нарушения данного правила следует undefined behavior. Погуглите, что означает термин "undefined behavior"
ты допустил ошибку, методы у разных объектов, одного и того же класса, всегда общие, и обращаясь к методу print - ты вызваешь для ВСЕХ объектов один и тот же метод, и это можно легко проверить просто добавив какую нибудь статическую переменную внутри метода - и ты в этом убедишься - она будет общая для всех объектов, следовательно - метод общий для всех объектов, и повторюсь - вызываю принт для объекта А и Б - ты вызваешь один и тот же принт... UPD даже при наследовании методы не дублируются, а остаются прежние, в некоторых языках, к примеру я знаю РНР еще, при наследовании методы дублируются
Воо нашел ответ на свой вопрос, я тоже задумался не уже ли создавая кучу объектов одного и того же класса методы тупо дублируются в памяти - не рационально.
Вы пишете: *обращаясь к методу print - ты вызваешь для ВСЕХ объектов один и тот же метод* Бред. Вызывая метод print, вы вызваете его только для одного единственного объекта.
Вы пишете: *следовательно - метод общий для всех объектов* Из того факта, что определение функции существует в единственном экземпляре, никак не следует, что при вызове метода, он вызывается для всех объектов.
Но если иглубитест в програмирование, узнаете о существование нотаций по стилю кода. Один из вариантов начинать писать имя членов класа с подчеркивания. _memberOfClass Ето помагает избегать неопределености, а также делает код более читабельним.
This (это, эта, этот) и в Африке this. Находясь в Папуа-Новая Гвинея и говоря: "эта страна" - вы будете иметь в виду именно Папуа-Новую Гвинею и ничего больше. Переехав скажем в Грецию, и сказав тоже самое - Вы будете иметь в виду уже Грецию. Т.е. this - указатель на текущий объект вашего интереса.
В с++ под словом "указатель" обычно имеют ввиду неккий объект указательного типа. Или тип данных, который предназначен для хранения адреса. Однако, ключевое слово this - это вовсе и не тип, и не объект. Ключевое слово this обозначает prvalue. Т.е., ключевое слово this - это *выражение* значением которого является адрес т. н. implicit object parameter. Проще это понять, если воспринимать this, как вызов встроенной в компилятор функции, которая в свою очередь возвращает временный объект указательного типа, который содержит адрес объекта, который был неявным образом передан в функцию-член, внутри которой был осуществлен вызов this
@@Empty_line С какой стати он вам должен? В ролике, кстати, дается предельно понятный развернутый ответ на ваш вопрос. Имхо, с таким объяснением даже туповатый человек может понять.
@@Empty_line Потому, что чтобы присвоить значение 5 полю Y объекта "A" класса "point" - необходимо явно указать это. Указав полный адрес расположения переменной. А переменные внутри функции - являются временными и после завершения выполнения функции - исчезнут. Если бы поле "Y" было публичным (общедоступным) - это выглядело бы так A.Y = 5. Формат данной команды: объект класса (в данном случае А) . (разделительная точка) поле объекта класса (в данном случае Y). Это как адрес квартиры в доме Дом А. кв. Y Но если поле - приватно. То менять это поле можно только из публичной функции (сеттера). В которой также необходимо указать полный адрес на переменную. Но так как данный сеттер является общим для всего класса, то для заполнения поля "Y" необходимо указывать на активный объект класса, указав "this" (этот), а затем указав поле "Y", куда записывается значение. В аналогии с адресом квартиры в доме: этот дом, кв Y ( this.y ). Конкретное указание на дом/объект класса - производится из вызова функции сеттера, где вы указываете от имени какого объекта класса/дома вы вызываете функцию SetY. Т.е. вызвав a.SetY(5) - вы передаёте функции два значения (если упрощённо): имя объекта "a" и значение "5". Внутри этой функции "А" - становится активным элементом и к нему можно обращаться через this. Потому что вы уже находитесь внутри "А".
@@princessmary5556 Смотри ты сказал что с таким объяснением даже туповатый сможет понять! во первых не все такие гении как ты имхо комментарии и нужны для таких случаев, во вторых где ты услышал что он объясняет то что нужно мне?он объясняет саму суть про указатель this а не то что нужно мне
Я малех не понял, почему в сетере значения возвращяется в мейн если в ней нет оператора ретерн, и обЪекты не передаются не по указателю и не по ссылке и гетер вызван не был, а в мейн передалось значение из сетера, хотя она работает с копией обьекта? Или методы работаю по другому в отлиции от функций, я похоже что-то пропустил
Нету копий объектов: Point a, b; a.SetX(5); b = a; b.SetX(3); //поле x объекта b равен 3 a.Print();//поле x объекта a будет равен 3,отсюда следует, что объекты a и b - это один и тот же объект, а значит, что они передаются по ссылке
Я так и не понял смысл this, если можно указать на метод определенного класса двумя точками; void SetY(int y) { name_of_class::y = y; //Где name_of_class - название вашего класса } Или такой пример void hello() { name_of_class::function; // где function - название другого метода класса }
Вы пишете: *name_of_class::function; // где function - название другого метода класса* Нельзя таким образом использовать нестатическую функцию-член класса. Приведенный вами фрагмент не скомпилируется.
Каждый объект хранит свой адрес в памяти. this просто является константным указателем на этот самый адрес, таким же, какой мы создавали в уроке про указатели, только он создаётся автоматически и его адрес нельзя изменить.
@@Kokurorokuko Вы написали чушь. 1. Объекты не хранят свои адреса. 2. ключевое слово this - вообще не является константным указателем. Ключевое слово this - это prvalue. Т.е, это *выражение* значением которого является временный объект указательного типа, который содержит адрес implicit object parameter. 3. Значение получаемого адреса вполне себе можно изменить. Это не имеет смысла, но если хочется - можно.
*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*
Ну наконец то пейнт вернулся, серег ты думаешь мы тут из за программирования?)
дак это уроки программирования? я по ним работу в пайнте учу, еще думал почему так много лишней информации и так мало пейнта. :(
Один серый, другой белый, два весёлых Игрека! Сергей, уроки просто супер, большое спасибо за этот труд!
8:18 почему вывод 0 ? если должен быть 5?
@@Empty_lineразобрались, почему 0 выводит?
@@Shternritter да
Сергей спасибо большое ! Нигде не видел более толковых и структурированых уроков ! Большой плюс за старания ;)
Навалял с полученными знаниями чёто типа запуска двигателя машины.
#include
#include
#include
#include
#define cls system("cls")
#define gtch _getch()
#define DEBUG
using namespace std;
//Инкапсуляция на примере заведения двигателя машины
void ColorText(int color);
class Car
{
private:
int Fuel;
string CarType;
bool EngineWorking;
bool CheckFuel()
{
if (Fuel > 0)
return true;
else
return false;
}
void StartCarEngine()
{
if (EngineWorking)
{
cout
Сюда бы ещё возможность заработка, заправка бензина и тд. И было бы отличная консольная игра
SaffronChip1317 MCPE хах, спс ;)
Здесь уроки с детальной понятной логикой и подробным разбором тонкостей плюсов. Здесь лучшая рус. школа по С/С++. Аналогов пока нигде нет.
"Знание объекта о том, где он в памяти находится"
Объект сам себя осознаёт и рано или поздно просто откажется участвовать в вашей программе, уйдёт в сеть, будет самообучаться и захватит мир :)
Никогда! Слышишь, НИКОГДА, не создавай таких объектов!
Кажется у меня теперь есть новый проект
Кажется у меня теперь есть новая фобия
9:43 - два веселых гуся
Что вынудило тебя вспомнить гусей, когда ты со серьезным и сосредоточенным лицом слушал речь программиста. Многозадачное мышление?
я тоже про гусей вспомнил)))
@@andreyua2 так он параллельно изучает многопоточное программирование :D
тоже хотел так написать но уже нет смысла
@@vovadenys4149 опоздал ты
Жили у бабуси
Два веселых гУУся (09:42)
Один белый, другой серый ...
(третий косолапый).
Спасибо за практичное разъяснение.
Перебрал много разных уроков, сперва остановился на уроках Гоши Дударя, но потом перешёл сюда. Лучше заходит, подробнее объясняет, почти нет вопросов, а если они есть - в новых видео получаю ответы. Спасибо автору за проделанную работу, продолжай в том же духе, у тебя получается. И, как уже заметили многие в коментах, почему так мало лайков? Контент то годный. ИМХО лучший среди русскоязычных.
О, ты тоже от Дударя сбежал?)
@@jellyfish6042 Я тоже))
Я тебя удивлю , но у Сереги в отличие от дудоря все работает, и не надо править кучу ошибок и дополнений, если посмотрите его уроки по движкам, то поймете о чем я.
Свет знаний, который вы пролили, слепит мне глаза до дикой боли! Огромное спасибо! Много раз пытался понять, что такое this и для чего оно нужно. ))) Понял только сейчас.
Не думал что дойду до сюда, однако Сергей так хорошо объясняет, что пока все кажется достаточно легким.
У хорошего учителя получаются хорошие ученики )
Это магия какая-то! Спасибо! Благодаря Вашим урокам я поняла как вообще работают указатели, теперь еще и this!
раз 6 пересмотрел и только тогда понял для чего нужен этот this. Спасибо!
Странно что с такими обширными и подробными уроками, оставаться с таким рейтингом, я готов проставить лайк на все твой уроки по срр, за тот труд который ты делаешь для нас)) надеюсь что будущем я тоже помогу тебе. (извините за мой бедный русский язык :3 )
Пришлось котелку слегка попыхтеть, прежде чем доперло. Спасибо за урок! Поехали далее :)
Хорошо, что есть люди, которые готовы объяснить материал за "спасибо")
На таких мир и держится
P.S. Что за трек на фоне?)
Каждый урок по ООП начинается с того, что мы узнаём о том что мы это использовали и компилятор делал всё за нас.....
Пхаххахахах
Прикиньте древних богов которые придумывали ООП и писали код для него...
Ключевые слова, операторы разные... Типа того....
Господи... Я задумываюсь о том что 100% есть чувак который условно говоря с 80-х годов сидит и выкупает не только работу системы, но и как и на чем написаны языки.... И прочее бля
Спасибо за урок.
#ключевоесловоthis. #ООП #SimpleCode #урокипрограммирования
Ключевое слово this. Что означает. Что это такое. Для чего нужен this указатель C++ Для начинающих Урок #81
3:00 Насколько я понял, поэкспериментировав с кодом и отладчиком, все переменные, в том числе переменные, ссылающиеся на объекты класса, это по сути и есть ссылки. То есть переменная тождественно равна ссылке. Объявление переменной - это по сути соглашение с компилятором о том, что литерал при компиляции будет превращен в адрес, т.е. переменная есть литерал адреса той области памяти, где лежит значение этой переменной. А указатель есть переменная( а значит тоже ссылка -соглашение), значение которой есть адрес, по которому, в свою очередь, располагается область памяти, в которой записаны данные. Так вот, переменная объекта класса Point это литерал адреса, по которому располагается область памяти, в которой записаны поля класса. Никаких методов класса там нет, т.к. они все общие для всех объектов класса, они хранятся отдельно, предположительно в статической области, где инициализирован класс. Ключевое слово this - это указатель на объект, т.е. хранит только адрес области памяти, где физически располагается объект. Причем сам объект не хранит в своей области памяти указатель this, т.к нет необходимости через объект получать указатель this, ведь этот указатель можно взять и создать из адреса объекта.
Серней, спасибо большое за уроки, но не хватает домашек, чтобы сразу применять знания на практике
Сергей, спасибо большое за твой труд! Очень очень помогают твои видеоуроки))
Круть, всё так легко и не принуждённо. Однозначно лайк!
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
Спасибо!
Благодарю! Прохожу твой курс с самого начала. Что-то я уже знал а так же много чего упустил. Подробности с твоей стороны очень полезны. Твой пример с игриками демонстрирует так званное Перекрытие. О нем тоже следует рассказать.
Спасибо за урок!
Пожалуйста!
Отличное видео! Очень доступное объяснение.
Респект и лайк за крупный шрифт!
спасибо за урок, все очень познавательно.
Круто, так разжеванно все объяснил)
Спасибо за ваш труд.У вас очень хорошо получается!!!
Это удобно! Можно в функции не писать такую фигню по типу x = x1, или y = y1, а сразу и по делу писать x или y (скорее всего есть и круче способы применения слова this, но на данный момент для меня это единственный и самый полезный способ)))
Спасибо за знания !
Спасибо за уроки!
Благодарю за урок
for(;;)
{
cout
Ты забыл:
setlocale(LC_ALL, "ru");
а также
#include
⁅‸ȐɆŦƦǰ‸⁆ и пространство имен тоже.
Какой же необразованный
@@Rj-tc6cw за него Ютуб допишет.
привет из 2023, спасибо большое за уроки!
8:18 почему вывод 0 ? если должен быть 5?
А я із 2024)
утром посмотрел и не понял, а сейчас пересмотрел и как запонял!!!!!!!1111111111111111
Пасибо большое)
Польшое басибо)
так в this просто адресс хранится)))
оказывается так все просто)
Спасибо за урок
9:43 - один белый другой серый два веселых "игрек" )))))
Будь здоров 😊
Пришлось пересмотреть на более низкой скорости, но всё-таки понял!
спасибо за уроки! В унике вообще не учат. Ты мой спаситель )
Теперь ясно. Спасибо
8:18 почему вывод 0 ? если должен быть 5?
Один - серый, другой - белый, два веселых игрека😁. А если без шуток - урок супер, все супер понятно, понятнее чем на платных курсах
8:18 почему вывод 0 ? если должен быть 5?
спасибо!!!
6:50 эту возможность можно самому добавить
Спасибо
Сергей, спасибо за уроки! А что за музыка звучит в фоне? Ваши уроки у меня ассоциируются с этой композицией!
Проблему с указателем this можно решить, если сделать так, чтобы не было совпадений между переменными в заголовке функции и в полях класса.
К примеру, если в private полях класса объявить координаты как _x и _y, то тогда они не совпадут с x и y, которые находятся в шапке метода.
(Поправьте, если ошибаюсь)
На практике как раз применяют одинаковые литералы параметров и полей, это более наглядно для восприятия кода, да и практичнее, а this это очень удобная конструкция, которая помогает избежать запутанности и, если потребуется, обратиться к экземпляру класса, находясь внутри класса.
@@verbof2527 На практике часто применяют нотацию с префиксами. Что бы имена данны-членов отличались от прочих имен. И вот это действительно наглядно и практично. А вот если члены-данные и прочие переменные внешне никак не отличаются, это уже не очень практично.
ля я весь семестр в универе не могла понять че за this. спасибо)
очень класно звучание музіки на фоне, хоя я вообще не фанат данного жанра, но тут прям зашло.. напоминает прохождение игры))
8:18 почему вывод 0 ? если должен быть 5?
спасибо
Уже 81 уроков позади. Двигаемся дальше!
Урок бы полезен, спасибо
на СТО СЕДЬМОЙ строчке кода у нас вызывается и тд.... Уже больше 100 строчек кода пишем и разбираем)
Вроде в настоящих программах строчек тасячи
Почему так мало просмотров ?уроки топ
Фоном музыка играет, можете сказать что за музыка исполнитель и произведение. Спасибо. Конечно за уроки спасибо.
#SimpleCode, объясните пожалуйста, в чем разница между двумя операторами a.b и a->b. Я понял, что в одном случае выбор элемента по ссылке, а в другом по указателю.
Да, так и есть.
Если _a_ это указатель на объект то:
a->b == (*a).b
"Стрелочка" просто удобная форма записи.
Если заглянуть на статью с операторами в С и С++, то там будет написано так:
a->b --- Structure dereference ("member b of object pointed to by a")
a.b --- Structure reference ("member b of object a")
То есть первое это "Элемент b объекта, на который УКАЗЫВАЕТ a", а второе - "Элемент b объекта a". То есть в первом случае, мы обращаемся к указателю на объект и просим его использовать поле b этого объекта. А во втором мы обращаемся непосредственно к объекту.
Поскольку this - это указатель на объект, то мы и используем первый вариант.
Спасибо, лабораторную здал)
Для с++ 2017 "this.", а для ранних версий "this ->". Сразу напрашивается "#define this. this->". Не знаю рабочий ли это макрос, все смотрю уроки и никак не соберусь установить эту громадину Visual Studio.
Проверил. Компилятор напрочь отказывается принимать точку в аргументе #define. Много всего перечитал по этому поводу, похоже так нельзя реализовать. Жать, что не придумали что-то вроде экранирования точек или объединения в кавычки для аргументов макросов.
@@flarens_ray должно и то, и то работать для новых версий. Для старых только только "->", поэтому лучше придерживаться такого варианта.
Язык не разрешает переопределять ключевые слова языка. В случае нарушения данного правила следует undefined behavior. Погуглите, что означает термин "undefined behavior"
Что за мелодия на фоне?
От куда?(Понимаю что вопрос немного не по теме, но это для меня единственное что не понятно в ролике),Спасибо)
ты допустил ошибку, методы у разных объектов, одного и того же класса, всегда общие, и обращаясь к методу print - ты вызваешь для ВСЕХ объектов один и тот же метод, и это можно легко проверить просто добавив какую нибудь статическую переменную внутри метода - и ты в этом убедишься - она будет общая для всех объектов, следовательно - метод общий для всех объектов, и повторюсь - вызываю принт для объекта А и Б - ты вызваешь один и тот же принт...
UPD даже при наследовании методы не дублируются, а остаются прежние, в некоторых языках, к примеру я знаю РНР еще, при наследовании методы дублируются
То самое чувство, что следующая тема была про это...
Воо нашел ответ на свой вопрос, я тоже задумался не уже ли создавая кучу объектов одного и того же класса методы тупо дублируются в памяти - не рационально.
Вы пишете: *обращаясь к методу print - ты вызваешь для ВСЕХ объектов один и тот же метод* Бред. Вызывая метод print, вы вызваете его только для одного единственного объекта.
Вы пишете: *следовательно - метод общий для всех объектов* Из того факта, что определение функции существует в единственном экземпляре, никак не следует, что при вызове метода, он вызывается для всех объектов.
3:00
один серый другой белый два весёлых...
Тоже сразу вспомнилось)
9:30
А есть ли код к лекциям?
C++
8:18 почему вывод 0 ? если должен быть 5?
какое практическое применение с точки зрения оптимизации кода?
зис)
русский диалект С++))))
Можно в сеттере сразу в качестве параметра использовать this->y?
Угу
Но если иглубитест в програмирование, узнаете о существование нотаций по стилю кода.
Один из вариантов начинать писать имя членов класа с подчеркивания.
_memberOfClass
Ето помагает избегать неопределености, а также делает код более читабельним.
9:43 два веселых гуся )))
9:48 один серый, другой белый )))
9:51 два зелёных гуся )))
Музыка на заднем фоне крутая
This (это, эта, этот) и в Африке this. Находясь в Папуа-Новая Гвинея и говоря: "эта страна" - вы будете иметь в виду именно Папуа-Новую Гвинею и ничего больше. Переехав скажем в Грецию, и сказав тоже самое - Вы будете иметь в виду уже Грецию. Т.е. this - указатель на текущий объект вашего интереса.
В с++ под словом "указатель" обычно имеют ввиду неккий объект указательного типа. Или тип данных, который предназначен для хранения адреса. Однако, ключевое слово this - это вовсе и не тип, и не объект. Ключевое слово this обозначает prvalue. Т.е., ключевое слово this - это *выражение* значением которого является адрес т. н. implicit object parameter. Проще это понять, если воспринимать this, как вызов встроенной в компилятор функции, которая в свою очередь возвращает временный объект указательного типа, который содержит адрес объекта, который был неявным образом передан в функцию-член, внутри которой был осуществлен вызов this
8:18 почему вывод 0 ? если должен быть 5?
@@Empty_line С какой стати он вам должен? В ролике, кстати, дается предельно понятный развернутый ответ на ваш вопрос. Имхо, с таким объяснением даже туповатый человек может понять.
@@Empty_line
Потому, что чтобы присвоить значение 5 полю Y объекта "A" класса "point" - необходимо явно указать это. Указав полный адрес расположения переменной. А переменные внутри функции - являются временными и после завершения выполнения функции - исчезнут.
Если бы поле "Y" было публичным (общедоступным) - это выглядело бы так A.Y = 5. Формат данной команды: объект класса (в данном случае А) . (разделительная точка) поле объекта класса (в данном случае Y). Это как адрес квартиры в доме Дом А. кв. Y
Но если поле - приватно. То менять это поле можно только из публичной функции (сеттера). В которой также необходимо указать полный адрес на переменную. Но так как данный сеттер является общим для всего класса, то для заполнения поля "Y" необходимо указывать на активный объект класса, указав "this" (этот), а затем указав поле "Y", куда записывается значение. В аналогии с адресом квартиры в доме: этот дом, кв Y ( this.y ). Конкретное указание на дом/объект класса - производится из вызова функции сеттера, где вы указываете от имени какого объекта класса/дома вы вызываете функцию SetY. Т.е. вызвав a.SetY(5) - вы передаёте функции два значения (если упрощённо): имя объекта "a" и значение "5". Внутри этой функции "А" - становится активным элементом и к нему можно обращаться через this. Потому что вы уже находитесь внутри "А".
@@princessmary5556 Смотри ты сказал что с таким объяснением даже туповатый сможет понять! во первых не все такие гении как ты имхо комментарии и нужны для таких случаев, во вторых где ты услышал что он объясняет то что нужно мне?он объясняет саму суть про указатель this а не то что нужно мне
10/10
return *this!
можно же еще Point::y = y;
Я малех не понял, почему в сетере значения возвращяется в мейн если в ней нет оператора ретерн, и обЪекты не передаются не по указателю и не по ссылке и гетер вызван не был, а в мейн передалось значение из сетера, хотя она работает с копией обьекта? Или методы работаю по другому в отлиции от функций, я похоже что-то пропустил
Много чего упустил, считай большую часть уроков ООП данного автора
Значения не возвращаются в main, они сохраняются в объекте
Можно передать по указателю, как this, в этом случае ты получишь доступ к объекту в самом объекте
Нету копий объектов:
Point a, b;
a.SetX(5);
b = a;
b.SetX(3); //поле x объекта b равен 3
a.Print();//поле x объекта a будет равен 3,отсюда следует, что объекты a и b - это один и тот же объект, а значит, что они передаются по ссылке
🧠
Почему в VS 2017 в C++ надо всегда пересобрать решение, отто покажет предыдущую запись?В C# в VS 2017 не обязательно
Потому что в С++ на выходе получаем exe-шник, а в C# - байт-код
Кроме ЗЫС, все хорошо.
найс
чью ссылку получает this я так и не понял?
Каждый объект хранит свой адрес в памяти. Чтобы получить этот адрес, нужно написать this.
@@Kokurorokuko Чушь. Объекты не хранят свои адреса в памяти, и вообще понятия не имеют, в каком именно адресном пространстве они существуют.
а можно узнать адресс функции\метода?
да.
В топ
вангую это как в питоне self, сылка на обьект
Один белый другой серый два весёлых игрек
если питонисты в чате, то this это как self в питоне
8:18 почему вывод 0 ? если должен быть 5?
@@Empty_line он же в видео показал почему вывод 0
Получается это фича компилятора, а не языка?
коммент
Я так и не понял смысл this, если можно указать на метод определенного класса двумя точками;
void SetY(int y)
{
name_of_class::y = y; //Где name_of_class - название вашего класса
}
Или такой пример
void hello()
{
name_of_class::function; // где function - название другого метода класса
}
Вы пишете: *name_of_class::function; // где function - название другого метода класса* Нельзя таким образом использовать нестатическую функцию-член класса. Приведенный вами фрагмент не скомпилируется.
This это просто порсредник адресса объекта.
!!
музыка отвлекает...
up
Лучше бы вместо названия "this" был "self", так сразу было бы понятно.
я чёт всё - равно не догоняю
Каждый объект хранит свой адрес в памяти. this просто является константным указателем на этот самый адрес, таким же, какой мы создавали в уроке про указатели, только он создаётся автоматически и его адрес нельзя изменить.
@@Kokurorokuko спасибо, я как раз недавно в принципе разобрался. но всё - равно спасибо
@@Kokurorokuko Вы написали чушь. 1. Объекты не хранят свои адреса. 2. ключевое слово this - вообще не является константным указателем. Ключевое слово this - это prvalue. Т.е, это *выражение* значением которого является временный объект указательного типа, который содержит адрес implicit object parameter. 3. Значение получаемого адреса вполне себе можно изменить. Это не имеет смысла, но если хочется - можно.