
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не догадался, да? Тебе приходилось программировать в среде Bornald Delphi, или Bornald С++? Виртуальная функция нужна для того, чтоб иметь возможность плодить наследников. Посмотри, вот я для тебя специально сделал скриншот:
Я кидаю на форму кнопку и ей автоматически присваивается имя Button1, ещё кнопку и у неё имя Button2, и так далее. Все эти Button1 - Button4 - это наследники виртуальной Button. Если бы не существовала виртуальная кнопка, ты не смог бы создавать кнопки-наследники.
Найди пожалуйста в классе class CObject виртуальную функцию
и объясни пожалуйста как это работает. Куда какие наследники надо писать? Что означает указатель(если я правильно понимаю) *node
Что означает mode я примерно понимаю. Но только примерно…
Не догадался, да? Тебе приходилось программировать в среде Bornald Delphi, или Bornald С++? Виртуальная функция нужна для того, чтоб иметь возможность плодить наследников. Посмотри, вот я для тебя специально сделал скриншот:
Я кидаю на форму кнопку и ей автоматически присваивается имя Button1, ещё кнопку и у неё имя Button2, и так далее. Все эти Button1 - Button4 - это наследники виртуальной Button. Если бы не существовала виртуальная кнопка, ты не смог бы создавать кнопки-наследники.
никогда больше не пиши мне.
Добрые вы, однако. Эмоции - аж через край. Разбирайтесь сами, раз такие.
бывает иногда
Найди пожалуйста в классе class CObject виртуальную функцию
и объясни пожалуйста как это работает. Куда какие наследники надо писать? Что означает указатель(если я правильно понимаю) *node
Что означает mode я примерно понимаю. Но только примерно…
https://www.mql5.com/ru/docs/standardlibrary/cobject - лучше разработчика я отвечу вряд ли. Наследники уже написаны. Использование символа звёздочки нужно для работы с памятью. Что такое mode - не знаю, но могу предположить, что это как-то связано с созданием нового экземпляра.
P.S.
Классы наследники (судя по справке) написаны разработчиком. Задайте лучше эти вопросы ему .
никогда больше не пиши мне.
Я не ставлю ни кого в игнор. Но просьбу выполню. Сам попросил.
https://www.mql5.com/ru/docs/standardlibrary/cobject - лучше разработчика я отвечу вряд ли. Наследники уже написаны.
... Виртуальная функция нужна для того, чтоб иметь возможность плодить наследников.
Я кидаю на форму кнопку и ей автоматически присваивается имя Button1, ещё кнопку и у неё имя Button2, и так далее. Все эти Button1 - Button4 - это наследники виртуальной Button. Если бы не существовала виртуальная кнопка, ты не смог бы создавать кнопки-наследники.
Виталий, я, конечно, извиняюсь, но то, что вы написали, не имеет ничего общего с механизмом виртуальных функций. Кнопки на форме не являются разными наследниками. Если будет время, напишу подробнее позже.
лучше бы сейчас популярно объяснили, в классах ничего сложного нет, но виртуальные функции
Найди пожалуйста в классе class CObject виртуальную функцию
и объясни пожалуйста как это работает. Куда какие наследники надо писать? Что означает указатель(если я правильно понимаю) *node
Что означает mode я примерно понимаю. Но только примерно…
Да это отличная штука!
У меня на этой самой виртуальной функции построены, по сути дела, все списки - сделок, открытых позиций, фреймов... да чего угодно!
Класс CObject - по мне - очень удобный. Это класс объектов, которые можно объединять в массивы-списки с возможностью сортировки.
При сортировке ничего не надо придумывать. Написал функцию сравнения (реализовал вот этот самый виртуальный метод Compare) - и вуаля - у тебя есть возможность любых сортировок.
Смотри, тебе надо пронаследоваться от CObject и переопределить функцию:
virtual int Compare(const CObject *node,const int mode=0)
В эту функцию передаётся указатель на другой такой же объект. Он передан в виде CObject*, но реально является указателем на другой твой такой же созданный объект. Внутри функции ты преобразуешь указатель, и имеешь возможность работать с ним. (Рекомендуется после преобразования типов проверить валидность переданного объекта).
И далее - ты имеешь "себя" (объект, в котором вызвана функция Compare()) и указатель на другой объект, с которым надо сравнить. Причем, тебе также передан режим сравнения, который можно использовать.
В функции смотришь на "себя", и на переданный объект, выясняешь, кто из них больше, и возвращаешь -1,0 или 1- в зависимости от результата. Как раз тут и можешь использовать и режим сравнения, чтобы сравнивать по разным критериям.
А дальше - создаёшь кучу таких объектов, заполняешь ими CArrayObj, и когда надо - вызываешь у этого массива функцию сортировки. В эту функцию также ты передаёшь режим сравнения. И класс CArrayObj - проведёт быструю сортировку с указанным режимом (используя функции сравнения).
По мне - отлично всё придумано!
Вот, для иллюстрации прикрепляю свой класс CFrameData - это объект фрейма, который используется для работы с результатами оптимизации. Как раз он пронаследован от CObject (CMyObject - это тот же CObject с небольшими добавлениями). Погляди, как там организованная функция Comparе! (Там много других функций и ссылок на другие файлы, но эта - достаточно ясно написана, и для неё всё должно быть понятно.)