Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
такой еще вопрос, вот статья Вики Абстрактный класс
интересует пример С++
Результат работы программы:
Program:
This object of the class CB; call function cb.Abstr(); call function cb.fun().
This object of the class CC; call function cc.Abstr(); call function cc.fun().
.
.
интересует метод void fun ( void ) :
- почему нет спецификатора virtual ?
- если добавить virtual , что это изменит в дальнейшем ?
зачем и на кой это, вот код:
2020.05.28 14:41:20.294 tst (EURUSD,H1) void B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void A::HighPriorityTask()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void A::HighPriorityTask()
это работает как мне и хотелось бы - есть базовый класс и наследуюсь от него, но в наследниках нужен будет лишь один метод и хочу вне зависимости от очередности обьявления и инициализации, сначала вызывать обьекты у которых есть метод HighPriorityTask() и потом уже Task()
и естественно все в одном цикле
это возможно простыми способами?
и естественно все в одном цикле
это возможно простыми способами?
А за каким таким хреном это нужно делать в одном цикле?
И почему это ещё и естественно?
Естественно циклов будет не меньше двух.
А за каким таким хреном это нужно делать в одном цикле?
И почему это ещё и естественно?
Естественно циклов будет не меньше двух.
ОК, 2 цикла, значит 2 цикла, значит чуда не будет ((
ОК, 2 цикла, значит 2 цикла, значит чуда не будет ((
Можно попробовать вообще избавится от циклов.
Тут есть примеры как напечатать от 1 до 100 без цикла и без рекурсии.
Может эти примеры помогут, если конечно это вообще в тему вопроса ))
такой еще вопрос, вот статья Вики Абстрактный класс
интересует пример С++
Результат работы программы:
Program:
This object of the class CB; call function cb.Abstr(); call function cb.fun().
This object of the class CC; call function cc.Abstr(); call function cc.fun().
.
.
интересует метод void fun ( void ) :
- почему нет спецификатора virtual ?
- если добавить virtual , что это изменит в дальнейшем ?
зачем и на кой это, вот код:
2020.05.28 14:41:20.294 tst (EURUSD,H1) void B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void B::Task()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void A::HighPriorityTask()
2020.05.28 14:41:20.298 tst (EURUSD,H1) void A::HighPriorityTask()
это работает как мне и хотелось бы - есть базовый класс и наследуюсь от него, но в наследниках нужен будет лишь один метод и хочу вне зависимости от очередности обьявления и инициализации, сначала вызывать обьекты у которых есть метод HighPriorityTask() и потом уже Task()
и естественно все в одном цикле
это возможно простыми способами?
1. Если объявить указатель базового класса, и создать объект дочернего, то при вызове методов через этот самый указатель базового класса:
а) виртуальные методы вызываются дочернего класса (через специально создаваемую для этого таблицу виртуальных функций)
б) не-виртуальные методы вызываются базового класса. Даже если в дочернем классе они переопределены.
2. Если хочется прям в одном цикле, то
а) заморачивайтесь сортировкой массива объектов по типу.
б) для специфичных задач - держите отдельный массив указателей на объекты, эти задачи выполняющие. Т.е. все объекты, которые должны вызывать HighPriorityTask
должны храниться в отдельном массиве, вызываемом в первую очередь
з.ы. а как вообще вы теоретически могли представить без сортировки - что за один проход цикла, сначала выполниться то что есть у половины объектов, а потом остальные? :) Ну если только очереди заданий городить.
Но это уже творческий вопрос- можно дофига изысканных способов придумать решить копеечную задачу)) главное на законы физики не покушаться и всё будет хорошо)))
2. Если хочется прям в одном цикле, то
а) заморачивайтесь сортировкой массива объектов по типу.
б) для специфичных задач - держите отдельный массив указателей на объекты, эти задачи выполняющие. Т.е. все объекты, которые должны вызывать HighPriorityTask
должны храниться в отдельном массиве, вызываемом в первую очередь
з.ы. а как вообще вы теоретически могли представить без сортировки - что за один проход цикла, сначала выполниться то что есть у половины объектов, а потом остальные? :) Ну если только очереди заданий городить.
Но это уже творческий вопрос- можно дофига изысканных способов придумать решить копеечную задачу)) главное на законы физики не покушаться и всё будет хорошо)))
однозначно не хочется, думаю компилятор оптимизирует пустые методы
1. Если объявить указатель базового класса, и создать объект дочернего, то при вызове методов через этот самый указатель базового класса:
а) виртуальные методы вызываются дочернего класса (через специально создаваемую для этого таблицу виртуальных функций)
б) не-виртуальные методы вызываются базового класса. Даже если в дочернем классе они переопределены.
да, почему то не запомнил, что вот только правил библиотеку json https://www.mql5.com/en/code/11134 (где то на гитхабе чуть посвежее нашел чем в КБ)
там и были предупреждения компилятора
deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
лечится указанием метода в классе
this.JSONValue::getLong(getValue(index),out);
спасибо, в общем понятная картина
однозначно не хочется, думаю компилятор оптимизирует пустые методы
виртуальные? не факт. но вызов пустой функции вряд ли много ест в любом случае.
ОК, 2 цикла, значит 2 цикла, значит чуда не будет ((
зачем пихать в один цикл то что по логике делается за два? ведь нет выигрыша ни по скорости, ни по наглядности, ни по простоте, а размеры винчестеров меряются давно не мегабайтами.
зачем пихать в один цикл то что по логике делается за два? ведь нет выигрыша ни по скорости, ни по наглядности, ни по простоте, а размеры винчестеров меряются давно не мегабайтами.
а я и не пихал еще ничего! ))))
пока только узнаю характеристики, чтобы сделать, что то похожее на нормальные вызовы методов
спасибо, в целом доходчиво разъяснили
виртуальные? не факт.
примерчик бы, вопрос то и появился от большого выбора средств полиморфизма, то virtual то без него, то наследуем, то закрываем в производных классах этот метод
Можно попробовать вообще избавится от циклов.
Тут есть примеры как напечатать от 1 до 100 без цикла и без рекурсии.
Может эти примеры помогут, если конечно это вообще в тему вопроса ))
А что? Еще один паттерн. Вот только что-то адепты паттернов его не признали, видимо не православный, не канонический. Почему не реккурсия? Тоже реккурсия, только не вдоль, а поперек.