Заблокирован
|
||||||
1 | ||||||
Можно ли из класса родителя просигналить всем потомкам?11.07.2013, 10:18. Показов 1184. Ответов 12
Метки нет (Все метки)
Если есть базовый класс "X" и несколько его потомков "A", "B" и "C", можно ли как то через объект базового класса сообщить всем созданным потомкам выполнить какую - то функцию?
Например:
0
|
11.07.2013, 10:18 | |
Ответы с готовыми решениями:
12
Присвоить значение всем потомкам родителя Можно ли в yii соединить (смержить) scope текущего класса со scope класса родителя? Написать функцию для просмотра по всем юношам данного класса, всем девушкам данного класса Вызов слота класса потомка при вызове сигнала класса родителя |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.07.2013, 10:22 | 2 |
babkaVkedah, Возможно. Сохранять все инстансы в базовом классе. Но это откровенно говоря изврат.
1
|
11.07.2013, 10:35 | 3 |
babkaVkedah, не думаю, что это возможно по причине того что будет необходимо выполнить метод для всех наследников класса. А теперь вопрос: существеут ли в С++ способ/метод по умолчанию учета всех созданных объектов класса A, B, C? Насколько мне известно нет. Поля класса инициализируются при определении объектов и связи с базовым классом в последствии не несут. Что бы вызвать выполнение методов наследников базового класса необходимо ссылыться на каждый созданный объкт. Ну... примерно так.
Единственный вариант который мне приходит на ум это создание в базовом классе массива указателей на создаваемые объекты. Таким образом создавая новый объект вы автоматически сохраняете на него ссылку. Далее при вызове вашего метода он(метод) считывает адрес созданных объектов и вызывает их методы. Все это происходит в цикле по всему массиву указателей до встречи нулевого указателя. Как это реализовать это отдельный вопрос, но думаю суть ясна. Чем-то напоминат списки.
0
|
Заблокирован
|
|
11.07.2013, 10:53 [ТС] | 4 |
У меня есть ещё вариант, задействовать Qt.
В базовом, да и во всех остальных, создать два метода Get и Set (set - signal, get - slot), чтоб можно было бы передавать что - то, например через строку джейсоновской натацией и получать что - то. Во всех классах потомках вызывать два connect, присоединяя Set потомка к Get родителя. А в базовом классе в слоте Get делать emit Set, чтоб при каждом получение Get из любого потомка, он испускал сигнал ко всем потомкам, ну как - то так
0
|
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
|
||||||
11.07.2013, 13:58 | 5 | |||||
Примитивный вариант
1
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
11.07.2013, 19:50 | 6 |
паттерн проектирования "наблюдатель", не?
на Qt куда элегантнее будет
0
|
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
|
|
12.07.2013, 07:04 | 8 |
В общем, да.
Не знаком, не знаю. Наверное то, что не ведется yчет всех объектов-потомков.
0
|
Заблокирован
|
|
12.07.2013, 08:14 [ТС] | 9 |
Конечно не ведётся, иначе какая же это автоматизация Думаю, лучший вариант - тот, который я сам предложил через Qt
0
|
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
|
|
12.07.2013, 09:32 | 10 |
Ну, если Qt позволяет меньше писать кода, то, можно этим воспользоваться.
Но учет все-равно должен как-то где-то вестись, пусть это и скрыто от нас (connect как бы намекает).
0
|
Заблокирован
|
|
12.07.2013, 10:19 [ТС] | 11 |
В том то и дело, что не надо
Фишка в том, что как я и говорил, в базовом классе делаешь SET и GET, а коннектишся к ним только в дочерних классах. Тоесть в дочернем классе надо просто иметь указатель на базовый и делать два коннекта. Кстате, как лучше получить указатель на базовый класс в дочерних? Как известно this, возвращает указатель на данный класс, может есть какая - то конструкция для получения указателя родителя? Может он так же как и для this где - то не явно храниться? Или же надо в базовом классе передавать указатель на самого себя в конструкторе?
0
|
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
|
|
12.07.2013, 10:59 | 12 |
Ну, может я не совсем понятно и корректно выражаюсь. Но вот понятно, что объект генерирующий сигнал, не обязан ничего знать о получателях сигнала (более того, получателей может и не быть вовсе) и, соответственно, получатели не обязаны ничего знать об объекте генерирующем сигнал.
Но сама внутренняя реализация механизма сигналов-слотов должна же как-то знать какие адреса (функции) вызывать при поступлении сигнала.
0
|
12.07.2013, 22:10 | 13 |
nxtech, кладу в избранное, как пособие по наследованию)
0
|
12.07.2013, 22:10 | |
12.07.2013, 22:10 | |
Помогаю со студенческими работами здесь
13
Передача управления из конструктора класса-родителя в конструктор класса-потомка Правда, что указатель класса-наследника не может указывать на объект класса-родителя? Инициализация членов дочернего класса членами класса родителя Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
|
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
|