
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Наверное вы не дочитали моё сообщение
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Учёба. Классы. Нужна помощь.
Alexey Viktorov, 2024.12.16 10:35
То-есть функция в потомке просто заменяет функцию родителя?
Если так, то зачем всё это городить если простая функция будет работать так-же… В чём прикол? В чём полезность виртуальности?
Ну в том примере, что привёл я, это не я писал, там более-менее понятно. Внутри классов СArray и СArrayObj неоднократно вызывается метод Compare и в этом случае понятно будет замена. А вот объяснения с классом CTrade совсем не догоняю.
Алексей, у Вас есть критическое мышление, что продвигает Вас на шаг ближе ))
Вот возьмём мой пример выше и просто переопределим метод озвучивания.
В журнале мы увидим такое:
Т.е. программа всегда вызывала метод родительского класса, без учёта классовой иерархии.
Это вы говорите о том, чей конструктор будет вызван. А я о другом, примитивном…
Это вы говорите о том, чей конструктор будет вызван. А я о другом, примитивном…
Это вы говорите о том, чей конструктор будет вызван. А я о другом, примитивном…
Попробуйте в Отладчике пройтись по коду в обоих моих примерах, с заходом в тело метода Sound(). Увидите разницу ))
Он про метод Sound
Попробуйте в Отладчике пройтись по коду в обоих моих примерах, с заходом в тело метода Sound(). Увидите разницу ))
Ну да. Немного дошло. Но чтобы этим пользоваться как, например шаблонными функциями, я пока не догоняю.
Видимо прав fxsaber
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Учёба. Классы. Нужна помощь.
fxsaber, 2024.12.16 10:30
Виртуальные методы полезны только при использовании указателей. Если указатели не используются, virtual не пригодится.
Видимо прав fxsaber
В этом правиле есть одно исключение.
Указатели не задействованы, но виртуальность используется.
В этом правиле есть одно исключение.
Указатели не задействованы, но виртуальность используется.
А причём тут указатели или нет? Если есть полиморфная связь между классами, то она и так сработает. Лишь бы компилятор пропустил... И указатель, в любом случае, можно с любого объекта получить в виде автоматического...
Например:
А этот пример с котом и собакой, кажется не сложно переписать на уровне примитива.
Перепишите.
Задача: указанное в настройках количество собак и котов должны издать свой звук. Все животные должны быть собраны в один общий массив (для чего может понадобиться собирать объекты в один массив - подумайте сами).
[edit]
исправил опечатку в коде (ранее количество котов зависило от numberOfDogs, а не от numberOfCats)
Все животные должны быть собраны в один общий массив (для чего может понадобиться собирать объекты в один массив - подумайте сами).
Представьте, что это какие-нибудь фильтры сигнала. Все фильтры сигнала выполняют одно и то-же действие - проверяют, разрешено ли покупать/продавать с помощью методов checkBuy() и checkSell(). Но каждый фильтр делает собственные проверки (один проверяет MA, второй проверяет RSI). Каждый фильтр может быть включен или отключен в настройках. Вы не знаете, сколько именно фильтров активировал в настройках пользователь. Вам нужно проверить все активные фильтры в нескольких местах программы. Вы будете каждый раз городить портяну из if, в которых будете проверять включен ли каждый фильтр в настройках? Или может лучше будет в OnInit() создать массив, куда собрать только те фильтры, которые включены в настройках?
Перепишите.
Задача: указанное в настройках количество собак и котов должны издать свой звук. Все животные должны быть собраны в один общий массив (для чего может понадобиться собирать объекты в один массив - подумайте сами).
Надеюсь, что вы уже написали процедурную версию, потому что я хочу, что бы вы внесли правки в процедурный код. Нужна возможность перемешивать животных. Чтобы потом животные издавали звуки в случайнеом порядке.
Правки в ООП код заняли минут 15, сколько времени займут правки процедурного кода?
P.S. И еще одно. Мне частно нужны животные в разных программах. Я хочу положить весь связанный с животными код в отдельный файл .mqh файл. А input настройки должны остаться в .mq5 файле.
P.S.2 В будущем может понадобиться сделать так, что бы звуки издавали только животные с четным или с нечетным номером. Не индексом в массиве, а тем номером, который содержится в имени животного. Как быстро можно добавить такой функционал для процедурного кода?