jcxz 209 Понедельник в 12:10 Опубликовано Понедельник в 12:10 · Жалоба 6 часов назад, Arlleex сказал: В голову пример такой пришел. Есть панель с подсветкой, подсветка из отдельных управляемых RGB-светодиодов. Каждый диод описывается как class Led { public: u8 red, green, blue; ... }; Неудачный пример. Так как здесь все переменные - логически связаны, расположены рядом и поэтому - ничто не мешает заменить их массивом и проходить циклом по нему. Указатели на члены тут как раз не нужны. Такой пример - это довод как раз против использования указателей на члены. Я же не зря уточнял: 18 часов назад, jcxz сказал: если имеется много переменных-членов, которые сами по себе независимы (логически), но в какой-то момент их нужно обработать однотипно, все сразу. 18 часов назад, Forger сказал: самый "практический способ" выстрелить себе в ногу И что же посоветует нам гуру "правильного" программирования для такого случая (когда нужно однотипно обработать несколько членов класса)? Как задать такой список? (члены логчически не связаны и расположены не рядом). PS: Если что-то критикуешь, то нормальным вроде является предложить альтернативу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 12:27 Опубликовано Понедельник в 12:27 · Жалоба 36 minutes ago, x893 said: На другой стороне Луны есть инопланетяне ? Spoiler 34 minutes ago, jcxz said: Как задать такой список? выше описано, дублирую: итератор (опционально) и соотв. метод/методы класса Led поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса или методов класса наследника (если поля protected) попытка читать и тем более изменять поля класса тем, кому это не позволено, лишает вообще смысла уходить на плюсы. Тогда лучше оставаться на голых сях ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 Понедельник в 12:40 Опубликовано Понедельник в 12:40 · Жалоба 3 часа назад, juvf сказал: Файл myTemplate.cpp #include "myTemplate.h" template <typename T> void f(T value) { // Общая реализация для всех типов } // Реализация явной специализации для типа `unsigned int` template <> void f<unsigned int>(unsigned int value) { printf("Hello unsigned int = %u"); } А зачем тут нужна явной специализация? почему не сделать вместо явной специализации просто функцию не заморачиваясь шаблонами? // Реализация явной специализации для типа `unsigned int` void fUInt(unsigned int value) { printf("Hello unsigned int = %u"); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 209 Понедельник в 12:45 Опубликовано Понедельник в 12:45 · Жалоба 19 минут назад, Forger сказал: поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса или методов класса наследника (если поля protected) попытка читать и тем более изменять поля класса тем, кому это не позволено, лишает вообще смысла уходить на плюсы. Тогда лучше оставаться на голых сях А что мешает использовать эти указатели только в методах класса? Я вроде не призывал использовать их за пределами методов класса. Как то странно вы читаете... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 12:49 Опубликовано Понедельник в 12:49 · Жалоба 4 minutes ago, jcxz said: А что мешает использовать эти указатели только в методах класса? А какой смысл тогда вообще их там использовать, если и так есть прямой доступ к полям этого класса? Или это задачка чисто академическая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 Понедельник в 12:55 Опубликовано Понедельник в 12:55 · Жалоба В 24.06.2024 в 17:27, Forger сказал: поскольку в целях безопасности все поля класса должны быть исключительно private (реже protected), то доступ к ним должен быть возможен только через соотв методы этого класса по мойму тут путаница тёплого с мягким. Задача про которую говорит jcxz - обработать много данных класса за раз (когда нужно однотипно обработать несколько членов класса). При чем тут приват? У вас есть класс с членами приватными (или протект, или паблик - не важно) A1, A2, A3, ... ,An. У этого класса есть паблик метод calcData(). Вызываем этот метод и нужно в нем обработать однотипно свои приватные члены класса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 12:55 Опубликовано Понедельник в 12:55 · Жалоба 5 minutes ago, jcxz said: ну ка и я спрошу у него.... Spoiler второе значение - кузнец, но первый вариант признаюсь по молодости чуть был, с кем не бывает, помогал друзьям студентам избегать прогулов )) 3 minutes ago, juvf said: Задача про которую говорит jcxz - обработать много данных класса за раз если так, то тем более на кой бок тут нужны указатели? разве что некий массив заполнить каким нить одинаковым значением, в цикле, но это делается как правило один раз в конструкторе, или вообще через memset а явный цикл по массиву наоборот явно покажет что происходит, а указатель может только запутать впрочем что происходит внутри класса, должно остаться внутри класса, и как это там реализуется не особо важно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 209 Понедельник в 12:59 Опубликовано Понедельник в 12:59 · Жалоба 5 минут назад, Forger сказал: А какой смысл тогда вообще их там использовать, если и так есть прямой доступ к полям этого класса? Или это задачка чисто академическая? Я вроде написал в самом начале: Если нужно однотипно (например - в цикле) обработать несколько логически не связанных и не смежных член-данных. Второе применение: нужно сослаться на член из const-массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 Понедельник в 13:00 Опубликовано Понедельник в 13:00 · Жалоба В 24.06.2024 в 17:40, razrab83 сказал: А зачем тут нужна явной специализация? почему не сделать вместо явной специализации просто функцию не заморачиваясь шаблонами? в отдельном взято случае, возможно просто функция без шаблона лучше/быстрее/понятнее/читаемо.... но, вы написали шаблон template <typename T> void f(T value) { // Общая реализация для всех типов } потом его используете (и не толко вы, а все пользователи вашего кода f<int>(a); f<uint>(b); есть некое API, и тут вас торкнуло для uint сделать немного по другому. Можно убрать шаблон для uint и сделать отдельную функци, тогда вы измените API и код, который уже написан и использует f<uint>(b); не будет собираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 13:00 Опубликовано Понедельник в 13:00 · Жалоба 4 minutes ago, jcxz said: Второе применение: нужно сослаться на член из const-массива. Если этот конст массив находится внутри класса и никто кроме класса не имеет к нему доступа, то вообще неважно кто как к кому обращается, абсолютно никакой, тут как привык кодить, чистая вкусовщина. Я же понял задачу так, что нужен некий способ обращаться к полям класса СНАРУЖИ и аж через указатели 😬 15 minutes ago, jcxz said: ну ка и я спрошу у него.... Quote jcxz существует? Да, jcxz существует. Это команда в x86 ассемблере..... Так я и знал ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 209 Понедельник в 13:08 Опубликовано Понедельник в 13:08 · Жалоба 13 минут назад, Forger сказал: на кой бок тут нужны указатели? разве что некий массив заполнить каким нить одинаковым значением, в цикле, но это делается как правило один раз в конструкторе, или вообще через memset Вы похоже и сами думать не хотите, и читать не желаете. Даже много раз повторенное: 10 минут назад, jcxz сказал: обработать несколько логически не связанных и не смежных член-данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 13:09 Опубликовано Понедельник в 13:09 · Жалоба 15 minutes ago, jcxz said: обработать несколько логически не связанных и не смежных член-данных. можете привести КОНКРЕТНЫЙ пример, где указатель прям вот очень нужен и без него ничего путного не получается? ps похоже хамство - это ваш стиль общения, стараюсь как многие не обращать внимания, хотя это и сложно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 153 Понедельник в 13:09 Опубликовано Понедельник в 13:09 · Жалоба 54 минуты назад, jcxz сказал: Неудачный пример. А в тыртырнете примерно такими примерами и кормят. Вне зависимости от логической связанности данных внутри класса эти указатели позволяют не дублировать кучу кода. Вроде мой пример вполне показывает минималистичный кейс, в котором +/- понятна идея этих указателей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 209 Понедельник в 13:14 Опубликовано Понедельник в 13:14 · Жалоба 15 минут назад, Forger сказал: некий массив заполнить каким нить одинаковым значением Начните уже думать наконец! Если есть члены класса: x1, x2, x3, x4, x5, x6, x7, x8, x9. Но цикл должен пройтись только по: x1, x3, x5, x9? Как их объединить в массив? А если часть этих членов - унаследована от родителя? Как их объединить в массив? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 Понедельник в 13:14 Опубликовано Понедельник в 13:14 · Жалоба 2 minutes ago, Arlleex said: в котором +/- понятна идея этих указателей. идея может и понятна, но какой в этом смысл? я честно не пойму, пример уж очень академический, обычный цикл и/или переписанная структура/union куда нагляднее покажет в коде что в нем делается, наглядно и без оверхеда (если в этом проблема), компиляторы нынче умные, прекрасно поймут что от них хотят Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться