более понятно для не IT шников.
вот надо кого то послать нахуй, например Ивана.
тут есть объект - иван, действие, и куда - нахуй, собственно действие и реализует наш класс типа tNahui и экземпляр nahui
т.е. в простейшем случае будет так:
tNahui nahui(Ivan);
nahui.poslat(); // когда ты рядом перед Иваном то тогда с точкой
если иван не рядом с тобой а к нему Федя пойдёт то не скажешь же ты Феде иди нахуй, ты получишь по морде от Феди (ну и от компилятора ошибку), у тебя будет указание - послать Ивана нахуй, т.е. работаем через указатель
Fedya = new tNahui(Ivan);
Fedya->poslat(); // когда ты далеко от ивана и даёшь указание Феде
а теперь предположим что тебе хочется узнать куда kuda() тип класса посылает. Тебе не нужен контекст и никакой иван не нужен чтоб послать, да и посылать ты не обязан никого. Ты можешь класс спросить и этот вопрос будет статичной функцией т.к. гвоздями у класса прибито это направление посыла и создавать экземпляр не нужно т.к. нет контекста.
log_out(tNahui::kuda()); // Выведет в лог "нахуй"
более понятно для не IT шников.
вот надо кого то послать нахуй, например Ивана.
тут есть объект - иван, действие, и куда - нахуй, собственно действие и реализует наш класс типа tNahui и экземпляр nahui
т.е. в простейшем случае будет так:
tNahui nahui(Ivan);
nahui.poslat(); // когда ты рядом перед Иваном то тогда с точкой
если иван не рядом с тобой а к нему Федя пойдёт то не скажешь же ты Феде иди нахуй, ты получишь по морде от Феди (ну и от компилятора ошибку), у тебя будет указание - послать Ивана нахуй, т.е. работаем через указатель
Fedya = new tNahui(Ivan);
Fedya->poslat(); // когда ты далеко от ивана и даёшь указание Феде
а теперь предположим что тебе хочется узнать куда kuda() тип класса посылает. Тебе не нужен контекст и никакой иван не нужен чтоб послать, да и посылать ты не обязан никого. Ты можешь класс спросить и этот вопрос будет статичной функцией т.к. гвоздями у класса прибито это направление посыла и создавать экземпляр не нужно т.к. нет контекста.
log_out(tNahui::kuda()); // Выведет в лог "нахуй"
спросил у чатджпт:
Шутка играет на различиях в синтаксисе программирования. В разных языках программирования для обращения к методам или свойствам объектов используются разные символы.
foo.bar(): Это стандартный синтаксис вызова метода для многих объектно-ориентированных языков, таких как Python, Java или JavaScript.
foo->bar(): Это синтаксис, который часто встречается в языках программирования на основе C (например, в C++ для указателей на объекты).
foo::bar(): Этот синтаксис используется, например, в C++ для вызова статических методов или для обращения к методам в пространствах имен.
На изображении персонаж, видимо, пытается понять, почему были использованы именно такие обозначения, и когда он доходит до третьего варианта, ему, видимо, что-то осознаётся (что именно — неизвестно, это и есть часть шутки).
Ну проблема в том, что у тебя простыня не очень правильная. Класс описывает поведение какого-то типа объектов, а не действия, которые с ними выполняются. Т.е. неграмотно создавать класс "нахуй". Можно создать класс "Хуй", и объекты у тебя будут не "Иван" и "Федор", а "морожовый", "конский" и т.п. И, соответственно, действие (функция, метод) "моржовый.послать" будет иметь аргументом "кого послать" - Ивана, Федора и т.п. Такое может быть, если ты пишешь софт для администрирования хуев, и тебе нужно задавать именно их поведение. Пусть будет так. Определили класс "Хуй" с функцией "послать_на", которая в качестве аргумента берет имя посланного и что-то с ним делает. Объявили экземпляр класса "моржовый" с какими-то там свойствами (диаметр, длина и т.п.).
Точка - это просто обращение к члену (гы-гы) класса для соответствующего объекта. Т.е. я пишу "моржовый.послать_на(Вася)", и Вася насаживается на моржовый.
-> это раскрытие указателя. Т.е. если я не знаю, на какой конкретно хуй я могу кого-нибудь послать, но знаю его местонахождение - то использую это. Например, мне известно, что ближайший хуй находится в комнате 404, то я пишу "комната 404" -> послать (Вася). Тогда исполнитель моей программы посмотрит, что находится в комнате 404, увидит там моржовый хуй класса "нахуй", и выполнит по отношению к Васе определенное для этого класса действие, а именно насадит Васю на находящийся в этой комнате хуй.
В чем у тебя неправильность - ты описываешь так, как будто действие выполняется через Федю, а это не так.
Но, допустим, ты не знаешь, какие у тебя хуи есть в распоряжении и где они находятся, а Федя знает. Тогда у класса, к которому принадлежит объект Федя, должен быть метод "сообщи местонахождение хуя". Тогда да, ты мог бы применить этот метод к Феде, Федя тебе сообщил бы указатель на хуй, и ты его использовал бы для вызова соответствующего метода посыла.
> Т.е. если я не знаю, на какой конкретно хуй я могу кого-нибудь послать, но знаю его местонахождение - то использую это. Например, мне известно, что ближайший хуй находится в комнате 404, то я пишу "комната 404" -> послать (Вася).
Только вот нахуя всё это надо? Если я в джаве знаю, что хуй находится в комнате 404, то я пишу комната404.getХуй().послать(Вася);
На кой хуй здесь какие-то ёбаные указатели, ёбаные стрелочки? Получили объект, вызвали у него метод, всё.
Потому что "комната 404" - это аналогия для понимания непрограммистами. На самом деле указатель указывает на место в памяти, это специфический объект, с которым надо работать особым образом.
Но сейчас программисты все дальше от физики, поэтому и не понимают, зачем это. А скоро нейросети заматереют окончательно, и не нужно будет и все остальное.
Потому что программирование - это вообще не про физику. Не вижу проблемы.
Я, как джавист, не знаю, зачем нужны эти указатели на указатели на указатели, нахуя мне место в памяти, которое указывает на другое место в памяти? В высокоуровневых языках (включая плюсы) любая переменная - это уже указатель на место в памяти, его разрулят компилятор и интерпретатор.
Этак можно сказать, а зачем нам вообще переменные, зачем нам плюсы, зачем операционная система, давайте напрямую с абсолютными адресами в памяти работать, а код писать на ассемблере, а лучше сразу в машинных кодах.
и правильно - не зачем... пока не понадобится оптимизировать например видео потоки или 3д графику или сотни потоков аудио налету без задержек. И причём своё специфическое. А не библиотечное. ЧТО ВАЖНО.
Вот тогда придётся опускаться на уровень всё таки пониже. Даже Rust не хватит т.к. придётся делать всё inplace не копируя гигабайты в секунду попусту. а уже только для этого и понадобятся указатели и указательная арифметика чтоб обрабатывать данные что пишет железо типа DMA или видяхи.
Но в большинстве обычных случаев 3д, видео и тд - с всем этим справляются либы и надо их просто вызвать и не ебать мозги с указателями.
так с Федором нельзя поступать, нужно использовать паттерн "интерфейс", и внутри уже раскидывать - непосредственно нахуй послать или с приветом через Федора
По мне так смешали разные языки. На первой пикче js/c++/c#. На второй и третьей кажется php, вызов метода экземпляра класса и вызов статической функции.
Если мне не изменяют универовские знания, то:
-> - вызов метода bar указателя на объект foo
. - вызов метода bar объекта foo
:: - что-то там с пространством имен, вызов метода bar из пространства foo?
Отличный комментарий!
вот надо кого то послать нахуй, например Ивана.
тут есть объект - иван, действие, и куда - нахуй, собственно действие и реализует наш класс типа tNahui и экземпляр nahui
т.е. в простейшем случае будет так:
tNahui nahui(Ivan);
nahui.poslat(); // когда ты рядом перед Иваном то тогда с точкой
если иван не рядом с тобой а к нему Федя пойдёт то не скажешь же ты Феде иди нахуй, ты получишь по морде от Феди (ну и от компилятора ошибку), у тебя будет указание - послать Ивана нахуй, т.е. работаем через указатель
Fedya = new tNahui(Ivan);
Fedya->poslat(); // когда ты далеко от ивана и даёшь указание Феде
а теперь предположим что тебе хочется узнать куда kuda() тип класса посылает. Тебе не нужен контекст и никакой иван не нужен чтоб послать, да и посылать ты не обязан никого. Ты можешь класс спросить и этот вопрос будет статичной функцией т.к. гвоздями у класса прибито это направление посыла и создавать экземпляр не нужно т.к. нет контекста.
log_out(tNahui::kuda()); // Выведет в лог "нахуй"