https://www.mql5.com/ru/docs/standardlibrary/cobject - лучше разработчика я отвечу вряд ли. Наследники уже написаны. Использование символа звёздочки нужно для работы с памятью. Что такое mode - не знаю, но могу предположить, что это как-то связано с созданием нового экземпляра.
P.S.
Классы наследники (судя по справке) написаны разработчиком. Задайте лучше эти вопросы ему .
Вот пример использования виртуальной функции о которой было сказано выше…
#include <Object.mqh>
#include <Arrays\ArrayObj.mqh>
CArrayObj list;
//--- Полностью класс я публиковать не будуtemplate <typename T1>
int CClass::compare(T1 data1, T1 data2) const
{
if(data1 == data2)
return0;
if(data1 > data2)
return1;
return -1;
}
//--- Надо в список объектов list добавить объект, но только если такого ещё нет в списке//--- Здесь проверяется наличие объекта в списке. Можно проверить по одному полю или по двум, по символу и ТФint CClass::Compare(const CObject *node, constint mode=0) const
{
const CNewBar *obj = node;
//--- при mode==0 сравниваем всёif(mode == 0)
{
if(compare(this.Symbol(), obj.Symbol()) == 0)
{
return compare(this.Timeframe(), obj.Timeframe());
}
elsereturn compare(this.Symbol(), obj.Symbol());
return -1;
}
//--- при mode==1 сравниваем символif(mode == 1)
return compare(this.Symbol(), obj.Symbol());
//--- при mode==2 сравниваем таймфреймыif(mode == 2)
return compare(this.Timeframe(), obj.Timeframe());
return -1;
}
И самое интересное, никакого цикла для поиска существования в списке…
Найди пожалуйста в классе class CObject виртуальную функцию
и объясни пожалуйста как это работает. Куда какие наследники надо писать? Что означает указатель(если я правильно понимаю) *node
Что означает mode я примерно понимаю. Но только примерно…
Смотрите. В ООП разработка начинается с проектирования общей концепции, а с помощью базовых классов задаётся формат реализации этой концепции.
Вернёмся к CObject. Объекты этого класса могут объединяться в списки (методы Prev и Next). Очевидно, что могут быть созданы потомки, которые реализуют коллекции объектов CObject. Таким потомком является CArray. В классе CArray есть метод Sort, который должен отсортировать элементы коллекции. Это метод как раз и будет вызывать метод Compare у элементов коллекции. Класс CArray "знает" про класс CObject и его методы и ничего "не знает" о потомках, но поскольку метод виртуальный, то будет вызван метод потомка. Соответственно, в потомке требуется реализовать корректное сравнение объекта с другим объектом. Этот "другой" объект передаётся в метод Compare посредством ссылки *node.
Т.е. Вы реализуете свой класс CMyObject как потомок CObject, реализуете метод Compare. Далее можно создать объект класса CArray, наполнить его вашими CMyObject и сортировка будет работать.
просил популярный, без шаблонов, без включаемых функций
Да там шаблон - не играет особой роли. А включаемых функций там нет, подключаемые файлы - это необходимые файлы для работы самого CObject и СArrayObj
Ну, вот, на прошлом листе - мой пример. Класс постоянно работает во всех моих экспертах, вполне отлажен. Как раз работа с методом Compare() - вполне ясна. Хотя, и в нём тоже есть подключаемые файлы.
Ну, вот, на прошлом листе - мой пример. Класс постоянно работает во всех моих экспертах, вполне отлажен. Как раз работа с методом Compare() - вполне ясна.
и самое главное для чего и почему может понадобиться виртуальная функция
Виртуальная функция - это единый "интерфейс функции" для различных наследников.
Виртуальная функция нужна тогда, когда во время написания кода сортировки - ты ещё не знаешь, что конкретно будешь сортировать. То ли строки, то ли цифры, то ли какие-то объекты.
Ты пишешь функцию сортировки, в котором вызываешь для сравнения эту самую функцию.
При этом тебе в этот момент известно только то, что ты сортируешь наследников от CObject, и знаешь, что в них есть эта самая функция. Что она делает - тебе совершенно неважно внутри массива при этой самой сортировке.
В этом и есть "сила" виртуальных функций.
В дальнейшем - ты создаёшь объекты, пронаследованные от CObject, в каждом из которых пишешь свою функцию сравнения, которая, однако, поддерживает этот самый виртуальный механизм. И твои объекты сразу же начинают нормально сортироваться, причём по настраиваемому критерию (параметр mode).
Без виртуальных функций такую возможность реализовать значительно сложнее.
Там все условия "к месту". Просто, там сразу раскрываются два момента - сама сущность виртуализации, и одновременно работа режима сортировки (переменная mode). Для новичков это может представляться, как "слишком много сравнений".
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
вот как раз компаре, для чего зачем там????
знаю что можно было давно это уже узнать все.
https://www.mql5.com/ru/docs/standardlibrary/cobject - лучше разработчика я отвечу вряд ли. Наследники уже написаны. Использование символа звёздочки нужно для работы с памятью. Что такое mode - не знаю, но могу предположить, что это как-то связано с созданием нового экземпляра.
P.S.
Классы наследники (судя по справке) написаны разработчиком. Задайте лучше эти вопросы ему .
Это похоже на отмазку при абсолютном незнании.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Учёба. Классы. Нужна помощь.
Sergey Gridnev, 2024.12.16 07:18
И самое интересное, никакого цикла для поиска существования в списке…
И работает на удивление шустро…
Найди пожалуйста в классе class CObject виртуальную функцию
и объясни пожалуйста как это работает. Куда какие наследники надо писать? Что означает указатель(если я правильно понимаю) *node
Что означает mode я примерно понимаю. Но только примерно…
Это похоже на отмазку при абсолютном незнании.
И самое интересное, никакого цикла для поиска существования в списке…
И работает на удивление шустро…
это худший пример
просил популярный, без шаблонов, без включаемых функций
+
и самое главное для чего и почему может понадобиться виртуальная функция
это худший пример
просил популярный, без шаблонов, без включаемых функций
Да там шаблон - не играет особой роли. А включаемых функций там нет, подключаемые файлы - это необходимые файлы для работы самого CObject и СArrayObj
Ну, вот, на прошлом листе - мой пример. Класс постоянно работает во всех моих экспертах, вполне отлажен. Как раз работа с методом Compare() - вполне ясна. Хотя, и в нём тоже есть подключаемые файлы.
Да там шаблон - не играет особой роли.
Ну, вот, на прошлом листе - мой пример. Класс постоянно работает во всех моих экспертах, вполне отлажен. Как раз работа с методом Compare() - вполне ясна.
Алексей просто замусорил "пример" условиями
и самое главное для чего и почему может понадобиться виртуальная функция
Виртуальная функция - это единый "интерфейс функции" для различных наследников.
Виртуальная функция нужна тогда, когда во время написания кода сортировки - ты ещё не знаешь, что конкретно будешь сортировать. То ли строки, то ли цифры, то ли какие-то объекты.
Ты пишешь функцию сортировки, в котором вызываешь для сравнения эту самую функцию.
При этом тебе в этот момент известно только то, что ты сортируешь наследников от CObject, и знаешь, что в них есть эта самая функция. Что она делает - тебе совершенно неважно внутри массива при этой самой сортировке.
В этом и есть "сила" виртуальных функций.
В дальнейшем - ты создаёшь объекты, пронаследованные от CObject, в каждом из которых пишешь свою функцию сравнения, которая, однако, поддерживает этот самый виртуальный механизм. И твои объекты сразу же начинают нормально сортироваться, причём по настраиваемому критерию (параметр mode).
Без виртуальных функций такую возможность реализовать значительно сложнее.
это худший пример
просил популярный, без шаблонов, без включаемых функций
+
и самое главное для чего и почему может понадобиться виртуальная функция
Так и я этого понимания хочу. Это мне «права купили, а ездить не научили…», примерно так-же.
Даже имея этот пример, я не понимаю что тут происходит.
Вот вижу попытки объяснить, но и сейчас, пока, до меня на очень доходит. Буду напрягать мышцы головы… Может смогу понять.
Алексей просто замусорил "пример" условиями
Там все условия "к месту". Просто, там сразу раскрываются два момента - сама сущность виртуализации, и одновременно работа режима сортировки (переменная mode). Для новичков это может представляться, как "слишком много сравнений".
и самое главное для чего и почему может понадобиться виртуальная функция
вот эти писаки в статьях, написали три слова, свою функцию выполнили, все статьи тут дерьмовые, написаны на отб-ь