Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131

Указатель на объекты и члены классов

06.12.2014, 20:57. Показов 1988. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class AA
{
    public:
        void Start( );
};
 
class BB
{
    public:
        void Start( );
};
 
 
class CC
{
    public:
        void End( );
};
 
 
class DD
{
    public:
        void Start( );
};
 
 
 
class УУ
{
    public:
        void Start( );
};

Мне в одной функции нужно вызвать все Start().


То есть не хотелось бы делать:

C++
1
2
3
4
5
6
7
void Func()
{
    sAA.Start( );
    sBB.Start( );
    sDD.Start( );
    sYY.Start( );
}
Можно как нибудь сделать указатель на все классы, чтоб пройтись циклом и вызвать все Start() у которых он есть?

Если что, базового класса нет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2014, 20:57
Ответы с готовыми решениями:

Объекты классов не видны во вложенной функции одной из классов
Такая вот проблема. Есть функция play() класса Game, где создаются объекты классов Game, Character, Battle. В ней я обращаюсь к еще одной...

Преобразования объектов классов в объекты других классов
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

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

31
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
07.12.2014, 14:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mporro Посмотреть сообщение
Вы статически связываете вызовы методов Start с вызовами методов другой иерархии, в которой эти методы уже связаны динамически.
Вы делаете именно это.
Вы можете петь, танцевать, пытаться обвинить всех вокруг во лжи и т.д. Но факт только один: связываете ли Вы вызов статически напрямую или связываете его через псевдоним -- это значения не имеет. Связываете Вы, именно Вы, а не программа во время исполнения.

Запишите себе куда-нибудь.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 14:27
Цитата Сообщение от mporro Посмотреть сообщение
Вы статически связываете вызовы методов Start с вызовами методов другой иерархии, в которой эти методы уже связаны динамически.
Цитата Сообщение от mporro Посмотреть сообщение
Вы делаете именно это.
Вы ошибаетесь.
Классы не имеют общих предков.
Нет никаких методов "которые уже связанны динамически".

И этот момент не имеет никакого отношения ко лжи господина Tulosba
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.12.2014, 14:54

Не по теме:

Эх, хорошо быть господином *feel like a sir*. Плохо только, что обвиняют во лжи, не считая это обвинением :)


hoggy, может быть тебе полегчает, если в моей фразе "бредовыми и непереносимыми" использовать союз "или" вместо "и"? На данный момент это единственная у меня мысль, которая, может быть, поспособствует принятию тобой решения о том, что вариант с функторами является бредовым (но не непереносимым).
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 15:02
Цитата Сообщение от Tulosba Посмотреть сообщение
может быть тебе полегчает, если в моей фразе "бредовыми и непереносимыми" использовать союз "или" вместо "и"?
Замена && на || ничего не меняет в плане вашей лжи.

До этого вы утверждали, что любые решения бредовые и не переносимые.
Теперь - что они бредовые, или не переносимые.

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

Поэтому модифицированная фраза по прежнему остается ложью.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
07.12.2014, 15:08
Tulosba, использование функторов имеет место быть. Это не соответствует ожиданиям автора темы в виде какого-нибудь указателя, но он искал решение сообразно своей квалификации. Насколько такое решение over в плане engineering - нужно смотреть для конкретной задачи.

hoggy, не важно, насколько технически правильные решения предлагаешь. Высказался необоснованно резко - народ и сагрился.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 15:14
Цитата Сообщение от 0x10 Посмотреть сообщение
Высказался необоснованно резко - народ и сагрился.
Лживые высказывания - лживы. И это не есть моя проблема.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.12.2014, 15:35
Цитата Сообщение от hoggy Посмотреть сообщение
Я продемонстрировал решение, которое не является бредовым и является переносимым.
Об этом уже говорили:
Цитата Сообщение от Tulosba Посмотреть сообщение
Возможно, у нас с тобой разные представления о том, что является бредовым, а что нет.
Я, например, отношу к этому в том числе и усложнение кода без получения от этого какого-либо преимущества.
Как было статическое связывание, так и осталось. Хочется добавить новую переменную нового типа - будь любезен впиши ее ручками в код и перекомпилируй. Ноль улучшений в плане дизайна, зато больше строк кода.
Цитата Сообщение от 0x10 Посмотреть сообщение
использование функторов имеет место быть.
Так никто и не утверждает обратное. В общем случае. Другое дело, что тема-то конкретная, а не абстрактная. И даже сам ТС допер, что логичнее и проще сделать иерархию, чем решать проблему при исходной постановке задачи.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 15:42
Цитата Сообщение от Tulosba Посмотреть сообщение
Как было статическое связывание, так и осталось. Хочется добавить новую переменную нового типа - будь любезен впиши ее ручками в код и перекомпилируй. Ноль улучшений в плане дизайна, зато больше строк кода.
Не уверен, что понял вас правильно. На языке с++ у вас есть только два пути: либо перекомпилировать после измнений, либо использовать систему плагинов (dll/so).

О какой именно автоматике идет речь?

Цитата Сообщение от Tulosba Посмотреть сообщение
Другое дело, что тема-то конкретная, а не абстрактная. И даже сам ТС допер, что логичнее и проще сделать иерархию
Не заметил.

Цитата Сообщение от pEntity Посмотреть сообщение
Да, ты прав. Тогда ждем еще вариантов )
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.12.2014, 15:44
Цитата Сообщение от hoggy Посмотреть сообщение
Лживые высказывания - лживы. И это не есть моя проблема.
Расскажи, чем твой подход с оборачиванием в std::function лучше явного вызова из первого сообщения ТС.
Покажи преимущества, чтобы не быть голословным.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 15:51
Цитата Сообщение от Tulosba Посмотреть сообщение
Расскажи, чем твой подход с оборачиванием в std::function лучше явного вызова из первого сообщения ТС.
Покажи преимущества, чтобы не быть голословным.
В данной ситуации он отвечает требованиям к решению.

В других ситуациях зависит от ситуации.

Например, соверменный гуй.

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

И вот у вас есть кнопка, которая ничего не знает о вашем бизнес-проекте.

C++
1
2
Button button;
button.onCkick = [}() { ShowDialog(); };
Не нужны никакие интерфейсы, никакая особая "специфичная ботва".

Если вы - программист интерфейса, занимайтесь интерфейсом.

Это лишь один из примеров. Надеюсь, что более вы не будите задавать мне вопросы из серии "зачем нужны делегаты", или "слоты-сигналы".

Я уже предложил вам создать отдельную тему, если у вас есть подобные вопросы. И не стану в дальнейшем поддерживать вас в вашем оффтопике.

По поводу ТС - я предоставил решение в рамках его задачи. Я не знаю зачем ему это нужно. И не утруждаю себя думками и догадками.
Я уже рекомендовал вам не делать выводы на домыслах.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
07.12.2014, 17:19
hoggy, речь ни в одном сообщении не шла о том, что функциональный стиль представления алгоритма плох или не нужен. Но ложка хороша к обеду. Использование такого подхода там, где есть более простое решение, только запутывает код. Настолько запутывает, что Вы уже и сами не можете разобрать в какой части статическое связывание, а в какой динамическое. И Вы предполагаете, что новичок, который даже паттернов проектирования не знает, разберётся в вашем примере? Нет!

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

Можно. Можно ехать из Санкт-Петербурга в Москву через Владивосток. Но зачем?

Вот за это Ваш код и называют бредовым, а не потому, что сами-по себе функторы плохи.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2014, 23:20
Цитата Сообщение от mporro Посмотреть сообщение
Использование такого подхода там, где есть более простое решение, только запутывает код.
Это и есть - простое решение. Вы не сможете предложить решения проще.
И когда я говорю "решение", то имею ввиду такое, которое не нарушает требований.

Цитата Сообщение от mporro Посмотреть сообщение
Настолько запутывает, что Вы уже и сами не можете разобрать в какой части статическое связывание, а в какой динамическое.
Я ничего не путаю. Вы меня ни с кем не спутали? Например, с собою?
Я заметил, сложности оно вызывает лично у вас.

А вот лично я знаю, как std::funсtion устроен внутри. Он, и многие другие, кроме него.

Цитата Сообщение от mporro Посмотреть сообщение
И Вы предполагаете, что новичок, который даже паттернов проектирования не знает, разберётся в вашем примере?
Захочет - разберется.
Не только в использовании, но и в устройстве самого делегата ничего такого сложного нет.

Цитата Сообщение от mporro Посмотреть сообщение
Код Ваш не эффективен.
Очень любопытно.
Дайте я угадаю: очередные домыслы? А вы в курсе насколько вообще эффективна конструкция std::function ?

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

Если очень просто попробовать это объяснить без технических деталей: представьте себе, что std::function волшебным образом подмешал в классы базовый класс и задействовал интерфейс.
И в некоторых случаях компилятор сможет задействовать прямые вызовы в обход полиморфизма.

Поэтому, когда вы заявляете об эффективности - будьте аккуратны.
В мире не существует делегата более эффективного, чем std::function.

Цитата Сообщение от mporro Посмотреть сообщение
Он не добавляет ничего, кроме проблем
Я не принимаю критику подобного рода без предложений альтернативных решений.
И когда я говорю "решение", то имею ввиду такое, которое укладывается в рамки заявленных требований.

Сможете предложить проще? Что бы даже такой такой новичок, как вы смогли легко понять - отлично.
Если не можете - тогда не тратьте время ни свое, ни людей.

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

У вас я вижу только новичковое "не осилил"

Добавлено через 9 минут
Цитата Сообщение от mporro Посмотреть сообщение
Можно. Можно ехать из Санкт-Петербурга в Москву через Владивосток. Но зачем?
Выше я уже писал: я не знаю, зачем ТС захотел выполнять запуски проходом по циклу.
ТС об этом не сообщал. Но он так захотел.
А значит решение должно предоставить такую возможность.

Предоставьте решение, которое способно это позволить.

Я посмотрю, как у вас это получится без делегатов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2014, 23:20

Указатель на члены класса (pointer-to-member)
Здравствуйте, пример из книги Гелберта Шилтда. #include <iostream> using namespace std; class myclass { public: int...

Static члены классов
Доббрый день. Хочу решить следующую задачу: посчитать количество сравнений, которое делает qsort. Для этого, как мне видится можно...

Описать члены-данных классов пользователя
Задача: Описать члены-данных классов пользователя. кадры имя-char * номер цеха-int разряд-int

Объекты и экземпляры классов
Здравствуйте, я читаю книгу "Изучаем C#" 3-e издание, Эндрю Стиллмена и Дженнифер Грина, так же посмотрел много видео уроков по этой теме,...

Указатель на массив указателей на объекты, передать в метод объекта
Здравствуйте! Нужно решить задачу, есть такой класс. class MyClsDisk { public: void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru