Цикл for вместо delay, работает, будет ли тормозить остальной скетч

Katapuf
Offline
Зарегистрирован: 16.05.2018

ToRcH2565 пишет:

Еще дальше было сказано что есть штука Switch case, почему не ее использовали? 

Я про это "Switch case" только сегодня узнал.

Поэтому, как то так.

А по способ "прически" кода, предложенный вами, понял.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Katapuf пишет:

А по способ "прически" кода, предложенный вами, понял.

Только при прическе кода, аккуратней, вот такая конструкция будет правильно работать только если понимать как работает if

1) if(!(mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())) return;

2) if(!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) return;

3) if(!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return;

Все 3 примера делают почти одно и тоже, так? но работать правильно будет только первый

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ToRcH2565 пишет:
Но делать класс ради использования один раз одного метода из него за весь код проекта - не хорошая идея.
Ну да. Если Вы программируете в последний раз, и больше вы собираетесь бросить это паршивое дело, то да .Городить класс в последний раз в жизни ни к чему. Но если вы все же продолжите это дело, то позже вам надо в этот скеч что добавлять еще.  Или еще вам вдруг понадобится писать новый проект и вы банально будете брать готовые решения из старого. А если не решения, то подходы. Опыт для программиста это не гордость за сделаные решения в прошлом, а куча работающего кода из которого можно кое что позаимствовать. И программист не только пишет код который решит проект сейчас, но и будет решать подобные задачи в будущем. Ну да если жизнь это даст. 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:

Ну да. Если Вы программируете в последний раз, и больше вы собираетесь бросить это паршивое дело, то да .Городить класс в последний раз в жизни ни к чему. Но если вы все же продолжите это дело, то позже вам надо в этот скеч что добавлять еще.  Или еще вам вдруг понадобится писать новый проект и вы банально будете брать готовые решения из старого. А если не решения, то подходы. Опыт для программиста это не гордость за сделаные решения в прошлом, а куча работающего кода из которого можно кое что позаимствовать. И программист не только пишет код который решит проект сейчас, но и будет решать подобные задачи в будущем. Ну да если жизнь это даст. 

Вопрос не скромный можно? вы на яве случаем не пишете\писали?

Делать класс ради одного метода - нет смысла.

Делать класс с методами A_Plus_B(int a,b) и B_Plus_C(int b,c) - нет смысла.

Зато есть смысл делать класс где protected int b; A_Plus_B(int a) и B_Plus_C(int c);

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

Если вы умеете в ООП - вы должны знать что класс это данные + код, а не голый код, и не голые данные.

Поэтому я и советовал: если вы не знаете зачем вам класс - используйте функцию.

Все вышесказаное - отрыв от реальности и упрощение, ибо классы не только данные + код =)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Я не хочу жевать одно и тоже http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov

Разумеется это просто вариант и только под ардуину. Ну а это как вариант #251

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Katapuf пишет:

Есть конечно предположение, что будет, но... я только учусь....

Просто пришла как говорится мысля... решил посмотреть, что будет.

Ведь учиться можно, только на своих ошибках, чужие ошибки, не запоминаются и не откладываются, в личном опыте. 

Как я понимаю, многопоточности в Ардуино нет...


 

многопоточность, это надо какую-нибудь RTOS прикручивать, только видимо это невозможно, препроцессор IDE не даст

Katapuf
Offline
Зарегистрирован: 16.05.2018

ToRcH2565 пишет:

Katapuf пишет:

А по способ "прически" кода, предложенный вами, понял.

Только при прическе кода, аккуратней, вот такая конструкция будет правильно работать только если понимать как работает if

1) if(!(mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())) return;

2) if(!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) return;

3) if(!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return;

Все 3 примера делают почти одно и тоже, так? но работать правильно будет только первый

Ну третья строка это "||" ИЛИ, а нам нужно и то и другое, соответственно "&&".

Первая строка : Если "!" (знак инверсии, то есть дальнейшее не верно) нет новой карты и считывание не производилось, то return; - то есть ждем когда появится новая карта и с нее будет считан код, тогда программа пойдет выполняться дальше. Знак "!" применен ко всем параметрам (2 шука), находящимся в скобках.

А вот почему не верна вторая строка?

Ведь у каждого из двух стоит "!", то есть и первый не должен исполняться и второй не должен исполняться.

 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:

Я не хочу жевать одно и тоже http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov

Разумеется это просто вариант и только под ардуину. Ну а это как вариант #251

Я это видел, и если это использовать с пониманием как что и зачем - смысл есть.

Но таки вопросов моих это не отменяет, а даже увеличивает значимость того о чем я говорил.

1) Если подобные примеру классы пихать в "свою" библиотеку - они очень полезны.

2) Если подобные примеру классы использовать в лоб - они вредны.

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

Классы можно использовать как агрегатор если у вас объектная модель и обьектов неизвестное число(0~бесконечности), Классы нужно использовать для описания сложной древовидной структуры обьектов(есть класс пульт, который в себе несет обьекты кнопок, которая в себе несет обьект состояние)

Классы нужно использовать для описания некой часто встречающейся законченой структуры, кто то сможет взять вашу структуру и модифицировать ее под себя(переопределение\наследование)

 

Опять таки замечаю что многие не отличают КЛАСС и ОБЪЕКТ, хз с чем это связано но факт есть факт.

В вашем примере по ссылке - объекты, нет там классов... нет там наследования, нет переопределения....

 

Давайте так, чтоб вы меня поняли, если вам в коде нигде не нужно явно вызывать(т.е. не потому что использование классов обязывает это делать, а потому что вам реально нужен еще один обьект данного класса и он не первый\последний) MyClass = new tMyClass(), вам классы не нужны. вам нужны обьекты.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ToRcH2565 пишет:
вам классы не нужны. вам нужны обьекты.

Не напрягайся, ты уже четвёртый, кто пытается это объяснить Квону. Ему уже не раз и не два говорили, что использовать классы, не используя при этом концепции ООП - просто синтаксическое излишество. Ни фига! Об уровне понимания человеком что такое класс вообще, можешь судить по тому, что он как-то пространства имён разновидностью классов обозвал на том основании, что синтаксически там тоже :: используется. Ну, нравится человеку ключевое слово class. И не важно, что не очень понятно, что это такое. Нравится и всё тут. Ну, а нравится - пусть использует. Расслабься :)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Katapuf пишет:

Ну третья строка это "||" ИЛИ, а нам нужно и то и другое, соответственно "&&".

Первая строка : Если "!" (знак инверсии, то есть дальнейшее не верно) нет новой карты и считывание не производилось, то return; - то есть ждем когда появится новая карта и с нее будет считан код, тогда программа пойдет выполняться дальше. Знак "!" применен ко всем параметрам (2 шука), находящимся в скобках.

А вот почему не верна вторая строка?

Давайте я в кратце расскажу как работает if, просто очень долго расписывать почему не сработает третья строка(а она намного более близка к нужному коду нежели вторая и если функции вызываемые в ней верно написаны то может сработать даже).

1) Условие всегда выполняются с права на лево до первой возможности выйти:

  a) if(1=1 || println('abc')){}; - println - не выполнится никогда. хотя он часть условия

  б) if(1=2 and println('abc')){}; - println - не выполнится никогда. хотя он часть условия

  в) if(1=2 || println('abc')){}; - println - будет выполнятсяж

Можно попробовать и проверить консоль на предмет вывода =)

2) Условия выполняются как в математике, скобки имеют значение.

  а) if((1=1 || println('abc')) && println('cba'))){}; - на экран выведет 'cba'

3) следует из 2х выше приведенных

  а)  if(!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) return; вот тут вообще не верное условие, т.к. return будет только если оба false, а нам нужно return если любой из них false;

  б) if(!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return; вот тут уже ближе к истине, но мы в любом случае будем вызывать mfrc522.PICC_ReadCardSerial(), даже если мы знаем что данных для считывания нет(первое условие)... что есть ошибка....

Теперь на основе знаний пункта 1 и 2 вы можете провести анализ всех трех условий, и увидеть что сработает как надо только первое из них =) 

 

зы. пока чепятал ответ забыл про эту строку...

Katapuf пишет:
Ведь у каждого из двух стоит "!", то есть и первый не должен исполняться и второй не должен исполняться.

Мне сложно обьяснить это не в формате ЯП, но восклицательный знак это отрицание(инверсия), было true стало false и наоборот было false стало true, никакого дополнительного смысла этот знак не несет. != : было равно, стало не равно(инверсия\отрицание)....

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Ворота пишет:

ToRcH2565 пишет:
вам классы не нужны. вам нужны обьекты.

Не напрягайся, ты уже четвёртый, кто пытается это объяснить Квону. Ему уже не раз и не два говорили, что использовать классы, не используя при этом концепции ООП - просто синтаксическое излишество. Ни фига! Об уровне понимания человеком что такое класс вообще, можешь судить по тому, что он как-то пространства имён разновидностью классов обозвал на том основании, что синтаксически там тоже :: используется. Ну, нравится человеку ключевое слово class. И не важно, что не очень понятно, что это такое. Нравится и всё тут. Ну, а нравится - пусть использует. Расслабься :)

 =) не особо напрягался, но спасибо за сбережение моих нервных клеток =))))

 

ua6em пишет:

многопоточность, это надо какую-нибудь RTOS прикручивать, только видимо это невозможно, препроцессор IDE не даст

Очень даже даст, и вполне реализуемо, только лишено смысла.

Katapuf
Offline
Зарегистрирован: 16.05.2018

ToRcH2565 пишет:

 

  а)  if(!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) return; вот тут вообще не верное условие, т.к. return будет только если оба false, а нам нужно return если любой из них false;

  

Мне сложно обьяснить это не в формате ЯП, но восклицательный знак это отрицание(инверсия), было true стало false и наоборот было false стало true, никакого дополнительного смысла этот знак не несет. != : было равно, стало не равно(инверсия\отрицание)....

Про а): Не успел жочитать до конца как понял. Ведь и правда, "!" неверным значение может быть как оба, так одно из...

А про последний абзац я же сам и писал, что "!" что он означает. 

Katapuf пишет:

Первая строка : Если "!" (знак инверсии, то есть дальнейшее не верно)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это как использование функции prinf??? Сразу на 8 килобайт код увеличит...а выхлоп стремится к минимальному?

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Katapuf пишет:

Первая строка : Если "!" (знак инверсии, то есть дальнейшее не верно)

Действие неверно и инвертировать значение действия..... Ладно главное вы суть этого знака поняли для себя =)

Просто чтобы не путатся с остальными программистами, действие неверно это false грубо говоря, а ! это тоже самое что *(-1)

 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

ua6em пишет:

Это как использование функции prinf??? Сразу на 8 килобайт код увеличит...а выхлоп стремится к минимальному?

Это вы вообще о чем и к чему? к примерам? так это просто для наглядности использовал именно ее, чтоб можно было загнать в мк и увидеть =)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

Золотое правило Адуинской программистской механики:  текст loop() должен полностью влазить в 1 экран.

Два замечания:

1. Фрагмент "Адуинской программистской механики" - лишний.

2. А фрагмент "loop()" нужно заменить на "любой функции".

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ToRcH2565 пишет:

Но делать класс ради использования один раз одного метода из него за весь код проэкта - не хорошая идея.

Отнюдь.

Класс - эфективный метод избежать конфликтов в пространстве имен.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

andriano пишет:

Отнюдь.

Класс - эфективный метод избежать конфликтов в пространстве имен.

Вы с квоном? Обьект, структура - да, эфективный.

Класс - это про другое.

Дополню, тут на форуме(хз где, но читал) - был "титановый велосипед" для кнопки - вот это отличный пример для чего нужен класс.

1) для переиспользования кода внутри одно проекта.

2) для переноса между проектами.(и то не всегда нужно городить класс)

3) Для создания древовидной структуры обьектов, и доступа к разным дочерним обьектам(наследуемым классам) как к родителю(унификация, читайте интерфейся).

4) ......

Но точно не для разграничения пространства имен.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Дело не в том "про что", а в том - с какой целью можно использовать.

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

И еще: что-то у меня сильное сомнение насчет неэффективности использования статического члена класса вместо функции. Что там еще неэффективного кроме передачи одного дополнительного параметра?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ничего опасного быть с qwone , а так же не быть с qwone.  Да и объекты можно описывать как через классы, так и через структуры, а можно и просто через типы. Но не все что описывается через классы может стать объектом. Но я просто предложил подход писать объекты через классы да в среде Ардуино. И да я не открыл Америку. Просто до меня в явном виде никто не писал объекты в класс и в основном скетче.

ПС: И в результате получился RTOS но на более высоком уровне и без сильной потери памяти и накручивании кода ;)

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:
Да и объекты можно описывать как через классы, так и через структуры, а можно и просто через типы.

Притормозите, обратной силы это не имеет =) Если из А следует Б, это еще не означает что перед Б всегда есть А. тут тоже самое

qwone пишет:
Но не все что описывается через классы может стать объектом.

Вы не поверите, все что описано классом и не стало обьектом(хотябы в потомке) - создано для энтропии, и не несет ровно никакой пользы. ибо класс это описание СТРУКТУРЫ(скелета, строения) ОБЪЕКТА.

qwone пишет:
Но я просто предложил подход писать объекты через классы да в среде Ардуино. И да я не открыл Америку.

Да вы открыли Java на Си и в среде с и так дико ограниченными ресурсами кидаетесь ими на лево и на право.

qwone пишет:
Просто до меня в явном виде никто не писал объекты в класс и в основном скетче.

А вы не думали что есть причина тому что есть класс, есть структура и есть объект, и не просто так все не пишут классами?

 

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ToRcH2565 пишет:
2) з.ы. я понимаю что си достаточно умный компилятор и вырежет кучу ненужных вещей которые вы делаете, но поверьте это не лучший подход... не нужно отдавать компилятору микроскоп чтоб он из него сделал молоток, которым вы забиваете гвозди =)
Вот именно . Вам дали умный компилятор и умный язык. Так пользуйтесь им. Не бойтесь. Он и код подчистит и память подожмет. Меньше всяких трюков, которые при обновлениисреды обрушат код.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

andriano пишет:

И еще: что-то у меня сильное сомнение насчет неэффективности использования статического члена класса вместо функции.

Точно статического? 

https://yadi.sk/i/VpZka5Ec3WKMQy

Я что то нигде не заметил статического =) 

Мало передачи одного параметра? причем ненужного и никак не используемого, и кто вам про один то сказал?

или вы считаете что происходит только передача ссылки на данные лишней?

Для статического метода - да, только передача лишней ссылки, дальнейшие рассуждения в 8бит мне сложно вести, в 32 бита чуть проще, там я в курсе про накладные расходы при передаче параметров и вызовов методов, но даже в 32 бита передача одной ссылки может сказыватся на производительности(передаем 4 параметра, пятым летит ссылка на данные, как итог лишний переход потому что все параметры улетят ссылками, а могли бы улететь данными).

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:

ToRcH2565 пишет:
2) для переноса между проектами.(и то не всегда нужно городить класс)
Ctrl+C и Cntl+V  вот и класс в другом проекте. Через функцию сложнее.

Чем? или вы считаете что, ну ка секунду, "функция это законченная подпрограмма" - не верно?

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:
Вот именно . Вам дали умный компилятор и умный язык.

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

qwone пишет:
Так пользуйтесь им. Не бойтесь. Он и код подчистит и память подожмет. Меньше всяких трюков, которые при обновлениисреды обрушат код.

Да, меньше....

http://arduino.ru/forum/programmirovanie/ne-vyzvvaetsya-funktsiya-iz-tsikla-while

Вот он и подчищает людям код.

 

qwone пишет:
ПС: И в результате получился RTOS но на более высоком уровне и без сильной потери памяти и накручивании кода ;)

Точно RTOS ? или пародия? как с многозадачностью? кто следит за памятью? 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ToRcH2565 пишет:
Вот он и подчищает людям код.
Вы заметили как этот чел всталяет код на форум. Это один из маркеров для старожилов забить на тему. Теперь про переполнение millis() и все .Тема в спам.

ToRcH2565 пишет:
Точно RTOS ? или пародия? как с многозадачностью? кто следит за памятью?

Компилятор. Если Вы ему дибильный код не всунете.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:

Вы заметили как этот чел всталяет код на форум. Это один из маркеров для старожилов забить на тему. Теперь про переполнение millis() и все .Тема в спам.

Загляните по ссылке, почитайте код, посмотрите решение проблемы, я тоже сначало хотел забить когда увидел паузу в 10 тиков, потом оказалось что человек понимает чего хочет, и что компилятор реально обрезал то что хотел человек =)

qwone пишет:
Компилятор. Если Вы ему дибильный код не всунете.

Простите вы точно не путаете RTOS ни с чем? 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ToRcH2565 пишет:
Загляните по ссылке, почитайте код, посмотрите решение проблемы, я тоже сначало хотел забить когда увидел паузу в 10 тиков, потом оказалось что человек понимает чего хочет, и что компилятор реально обрезал то что хотел человек =)

1- кривой код 2 криво вставлен 3 не правлю чужие скетчи, так как паршивая структура программы.

ToRcH2565 пишет:
Простите вы точно не путаете RTOS ни с чем?
Вам шашечки или ехать. Если шашечки, то без меня.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ToRcH2565 пишет:

Для статического метода - да, только передача лишней ссылки, дальнейшие рассуждения в 8бит мне сложно вести

Про какую лишнюю ссылку речь?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ToRcH2565 пишет:

...дальнейшие рассуждения в 8бит мне сложно вести, в 32 бита чуть проще, там я в курсе про накладные расходы при передаче параметров и вызовов методов, но даже в 32 бита передача одной ссылки может сказыватся на производительности(передаем 4 параметра, пятым летит ссылка на данные, как итог лишний переход потому что все параметры улетят ссылками, а могли бы улететь данными).

Мне еще сложнее Вас понять.

Если под "все параметры улетят ссылками, а могли бы улететь данными" Вы подразумеваете, что параметры будут переданы по ссылке вместо того, чтобы быт переданными по значению, боюсь, Вы ошибаетесь.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

qwone пишет:
Вам шашечки или ехать. Если шашечки, то без меня.

Тык про RTOS не я завел разговор...

DetSimen пишет:
Про какую лишнюю ссылку речь?

При вызове метода первым параметром улетает ссылка на данные метода.

andriano пишет:

Если под "все параметры улетят ссылками, а могли бы улететь данными" Вы подразумеваете, что параметры будут переданы по ссылке вместо того, чтобы быт переданными по значению, боюсь, Вы ошибаетесь.

Очень лень гуглить, но примерно так как вы написали, и зря вы боитесь, я крайне редко неверно помню информацию которую читал давно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

Класс - эфективный метод избежать конфликтов в пространстве имен.

Просторанство имён - гораздо более эффективный способ избежать конфликта в пространстве имён.

А вот тут я не понял

andriano пишет:

статического члена класса вместо функции. Что там еще неэффективного кроме передачи одного дополнительного параметра?

ToRcH2565 пишет:

Для статического метода - да, только передача лишней ссылки, 

мужики,  я понимаю, что глубокая ночь была, но не могу не присоединиться к вопросу DetSimen.

DetSimen пишет:

Про какую лишнюю ссылку речь?

Вы вообще о чём? О какой такой ссылке, передаваемой статическому методу? Ни хрена ему не передаётся, функция как функция.

И, наконец, 

qwone пишет:

как через классы, так и через структуры, 

объясните, пожалуйста, что Вы имели в виду? Так просто на всякий случай напоминаю, что классы в С++ создаются при помощи трёх ключевых слов: struct, class и union.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

ЕвгенийП пишет:

Вы вообще о чём? О какой такой ссылке, передаваемой статическому методу? Ни хрена ему не передаётся, функция как функция.

SomeClass::StaticFunct() - обычная функция

SomeClass->StaticFunct() - Обычный метод.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ToRcH2565 пишет:

SomeClass::StaticFunct() - обычная функция

SomeClass->StaticFunct() - Обычный метод.

И что? Статическому методу (описанному как static) будет передан this? И что он с ним будет делать? Ничего ему не передаётся.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Мосье на лекциях по С++ спал штоли? 

статические методы работают со статическими данными, едиными для всех экземпляров.  Нахрена методу указатель на данные, если он и так знает где они находятся?   Компилятор их заботливо туда положил и адрес запомнил. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ЕвгенийП пишет:
классы в С++ создаются при помощи трёх ключевых слов: struct, class и union.
А пападробнее?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Статический метод аналогичен обычной функции вообще во всем, кроме областей видимости.  У него даже адрес брать можно и передавать туда, где требуется обычная функция. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А чего там может быть подробнее? Все три ключевых слова создают классы, см. раздел 9.1 стандарта ISO/IEC 14882-2014: "class-key: class, struct, union"

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

еще бывает enum class :)   

но он ненастаящий. :) 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

еще бывает enum class :)   

но он ненастаящий. :) 

Ну, это да :))) Тут некоторым коллегам и кобыла - невеста пространство имён - класс :)))

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

DetSimen пишет:

Мосье на лекциях по С++ спал штоли?

Мосье вообще не пишет на плюсах, и мало мальски на си =)

DetSimen пишет:

статические методы работают со статическими данными, едиными для всех экземпляров. 

Могу быть не прав =) бо в моем ЯП нет такого понятия =) точнее небыло во времена учебы =)

 

DetSimen пишет:
Нахрена методу указатель на данные, если он и так знает где они находятся?   Компилятор их заботливо туда положил и адрес запомнил.

Думал, потом еще раз думал, и наверное вы таки правы =) над будет посмотреть чего там и куда.. но выглядит очень логично.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я когда из запоя выхожу, всегда читаю Коран от Страуструпа.  Очень способствует. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Я когда из запоя выхожу, всегда читаю Коран от Страуструпа.   

А когда в процессе запоя? Цитируете прочитанное здесь? Неплохо, ктстати, получается.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

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

И этта,  я не пророк его.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

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

И этта,  я не пророк его.  

Отличное правило, а то мой приятель руководителю позвонил, теперь ЛЭП 500кв обслуживают без его чуткого руководства

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак опыт - сын ошибок трудных.  Неспроста же это правило появилось. :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

Мосье на лекциях по С++ спал штоли? 

статические методы работают со статическими данными, едиными для всех экземпляров.  Нахрена методу указатель на данные, если он и так знает где они находятся?   Компилятор их заботливо туда положил и адрес запомнил. 

Если это ко мне, то когда я спал на лекциях, С++ еще в природе не было.

И - да - каюсь, С/С++ для меня не родные языки. Напутал. Даже лишнего параметра не будет.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ToRcH2565 пишет:

Очень лень гуглить, но примерно так как вы написали, и зря вы боитесь, я крайне редко неверно помню информацию которую читал давно.

Ну, и на старуху бывает проруха. Боюсь, сейчас - как раз тот крайне редкий случай.

Потому как я не представляю, в какой ситуации компилятор вместо значения может положить адрес или наоборот.

Но вот конкретно упоминание числа 4 наводит на мысль, что имелось в виду: до 4 параметров - в регистрах, а более 4 - в стек. Естественно, на работу со стеком - дополнительные операции. Причем в обе стороны (и когда класть, и когда извлекать). Только помнится, было это не на AVR, а на i386+, а число 4 объясняется списком регистров: EAX, EBX, ECX и EDX.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

andriano пишет:

Если это ко мне, то когда я спал на лекциях, С++ еще в природе не было.

И - да - каюсь, С/С++ для меня не родные языки. Напутал. Даже лишнего параметра не будет.

не не не, это ни в коем случае не Вам, это торчку. 

pickuper220
Offline
Зарегистрирован: 09.07.2015

ЕвгенийП пишет:

Katapuf пишет:

А причем тут ваши ошибки? Использовать for попробывал я и ваши ошибки я не рассматривал.

Так при том. Сам написал - сам и анализируй что получилось. Именно этот процесс анализа и есть учёба на ошибках. А Вы анализ на нас перекладываете.

Сам написал - сам и анализируй что получилось. Именно этот процесс анализа и есть учёба на ошибках. А Вы анализ на нас перекладываете.

Блин. Товарищи. Не мучайте мозги друг другу.

Если Вы  Великий учитель, магистр джедаев, то идите и учите студентов! Зачем тут учить??? Тут не нужна ваша "учительская мудрость" в духе "Ты, ученик мой ответ внутри себя найдешь, незачем тебе на формах лазить".

Тут люди начинающие ищут ответ на вопрос: А как бы сделал профессионал. И ВСЕ!

По сути форум - обмен знаниями между тупыми и умными. Что бы тупые стали умными. Но! Внимание!

Если ты типа умный, то не надо делать мозги! типа "Сам анализируй, зачем тебе голова". Мозгодел.

Изза таких мозгоделов, типа умных форумы перелиты водой, читать много приходится ругачки в сообщениях и оправдываний самого мозгодела.

Ответ типа "Сам анализируй" - ответ плохого человека. Можно вообще не отвечать, и без умничаний ваших тут тема продолжится.

Учебу он тут организовал. Лектор. Профессор кислых щей. Экзаменатор тут нашелся.

Нет бы сказать по делу, по мужски, а он "А Вы анализ на нас перекладываете". Ну ваще, взвалили на него одного, несет пупок трещит. Как не обосрался только... Анализ на него переложили. Да зачем ты тогда нужен тут на форуме? Анализ видите ли ему претит.

Накипело.

Послесловие.

Нечего мне тут оправдываться или возражать или вообще отписыватсья. Вообще мне пишите никто.