Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Можно сразу оба варианта прописать и работать как больше удобно.
А как завернуть массив в объект и работать через указатель ?
Может в моем примере это и не надо. Приведите пример где это может потребоваться?
Так массива в классе нет.
Я в ООП не силен потому и спрашиваю.
В моем понимании если в класс передается ссылка на массив ТО почему нужно копировать в класс массива (что достаточно затратно) , если по идее можно взять указатель и получить этот же массив но уже в классе?
Надеюсь я понятно выразился.
потому что исходный массив может поменяться снаружи. Вам же ссылку отдали ? вот она вещь одноразовая.
там может была таймсерия - и физически между вызовами память перевыделена, бары добавлены и прочая-прочая.
(ссылка в MQL не эквивалентна ссылке в С++ или не дай бог в C#, это не передача по имени, синониму - считайте её одноразовым указателем С)
К сожалению, указателей на массивы нет, и меня это весьма раздражает.
Особенно глупо получать массивы в индикаторе, и на каждом тике их копировать себе.
Слава Богу, хоть есть указатели на объекты, и массив можно обернуть в объект.
К сожалению, указателей на массивы нет, и меня это весьма раздражает.
Особенно глупо получать массивы в индикаторе, и на каждом тике их копировать себе.
Слава Богу, хоть есть указатели на объекты, и массив можно обернуть в объект.
а как обернуть массив в объект и как эт о можно использовать. Можно пример ?
а как обернуть массив в объект и как эт о можно использовать. Можно пример ?
Пример - в Стандартной Библиотеке объекты массивов, скажем, CArrayInt
Объявляешь его, и дальше - все действия производятся с этим объектом, а когда надо передавать массив в функцию, но не хочется его копировать - передаешь адрес объекта, и дальше используешь его. Копирования не происходит.
Пример - в Стандартной Библиотеке объекты массивов, скажем, CArrayInt
Объявляешь его, и дальше - все действия производятся с этим объектом, а когда надо передавать массив в функцию, но не хочется его копировать - передаешь адрес объекта, и дальше используешь его. Копирования не происходит.
Поискал по всему форуму так и не нашел примера как передать массив в класс.
Дык классы не предназначены для передачи в них или из них данных. Поэтому для программирования логики малополезны.
Польза есть только как некое обобщение-обертка уже готовых функций, хотя и это решимо на процедурном уровне..
Ну так и в процедурном виде это так. Видно что эта обертка бессмысслена, лишь потеря времени и лишний код.
Да ну ???
Попробуй возможность не копировать массив, а передавать адрес - дорого стоит. Вот, в индикаторах ты получаешь массивы "в процедурном стиле". И без копирования - не обойдешься.
Как раз классы - вполне себе предназначены для передачи из них и в них данных.
В частности, я уже не раз показывал, как у меня организован доступ к истории или к позиции - ты получаешь виртуальный интерфейс, в котором одни функции. Внутренняя реализация - полностью скрыта. Именно инкапсуляция ООП это и позволяет. А полиморфизм - позволяет без больших затрат иметь переносимый код. Просто определяется интерфейс взаимодействия, и дальше - и "клиент" и "сервер" просто взаимодействуют, исходя из этого интерфейса, не посвящая друг друга во внутреннюю реализацию. Без ООП такую инкапсуляцию сделать не выйдет.
Попробуй возможность не копировать массив, а передавать адрес - дорого стоит. Вот, в индикаторах ты получаешь массивы "в процедурном стиле". И без копирования - не обойдешься.
Как раз классы - вполне себе предназначены для передачи из них и в них данных.
Действительно, хорошее замечание. Нельзя все написать в процедурном стиле. Например, передать любое количество массивов в функцию в процедурном стиле не получится.