ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 26
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Возник вопрос:
Есть класс "Программа", который использует классы "Новый бар" и "Менеджер данных". Класс "Новый бар" в свою очередь также использует "Менеджер данных". В классе "Менеджер данных" реализованы публичные геттеры и сеттеры.
Вопрос: какие есть варианты при инициализации программы у класса "Новый бар" задать свойства "символ" и "таймфрейм" класса "Менеджер данных"? Не хочется в классе "Новый бар" городить публичные геттеры и сеттеры для доступа к полям менеджера данных. Сам менеджер данных хочется при этом оставить private.
Иными словами: программа может использовать много классов, которые используют менеджер данных. А при инициализации программы нужно поля всех менеджеров всех классов инициализировать нужными значениями. Но во всех классах не хочется городить геттеры для доступа к полям менеджера данных. Как-то так...
По вашему описанию логично выделить эти настройки в отдельную сущность, единую для всех менеджеров и не только
Да, похоже нужно наследовать классы, где нужен менеджер от базового класса, в котором есть геттеры к полям менеджера. Спасибо.
Возник вопрос:
Есть класс "Программа", который использует классы "Новый бар" и "Менеджер данных". Класс "Новый бар" в свою очередь также использует "Менеджер данных". В классе "Менеджер данных" реализованы публичные геттеры и сеттеры.
Вопрос: какие есть варианты при инициализации программы у класса "Новый бар" задать свойства "символ" и "таймфрейм" класса "Менеджер данных"? Не хочется в классе "Новый бар" городить публичные геттеры и сеттеры для доступа к полям менеджера данных. Сам менеджер данных хочется при этом оставить private.
Иными словами: программа может использовать много классов, которые используют менеджер данных. А при инициализации программы нужно поля всех менеджеров всех классов инициализировать нужными значениями. Но во всех классах не хочется городить геттеры для доступа к полям менеджера данных. Как-то так...
Я примерно так делаю.
Я примерно так делаю.
Спасибо за пример, немного сложновато пока, но в целом идея ясна. Сразу же возникает вопрос: ок, если "один уровень вложенности" - здесь понятно, а если будет несколько уровней вложенности?
Добавлено:
Также не ясно, зачем поле cIsDelData? Ведь в деструкторе можно просто проверить m_data на POINTER_DINAMIC. Или я не прав?
Если делать наследование, то вылезет много ненужных методов. А объект-то должен быть приватным. Поэтому, не поверите, но проще всего так и сделать - сеттеры для всех классов, использующих датаменеджер.
Если все датаменеджеры работают с одинаковыми параметрами, то лучше не плодить объекты, а передавать указатель на один датаменеджер. В этом случае будет нужен только один сеттер для передачи указателя.
Спасибо за пример, немного сложновато пока, но в целом идея ясна. Сразу же возникает вопрос: ок, если "один уровень вложенности" - здесь понятно, а если будет несколько уровней вложенности?
Добавлено:
Также не ясно, зачем поле cIsDelData? Ведь в деструкторе можно просто проверить m_data на POINTER_DINAMIC. Или я не прав?
Спасибо, буду думать.
Я примерно так делаю.
что означает эта строчка CDataManager* m_data;
Ребята я хочу сделать такую штуку. Есть макрос
В результате у меня будет 2 макроса foor и foor1.
что означает эта строчка CDataManager* m_data;
Ребята я хочу сделать такую штуку. Есть макрос
В результате у меня будет 2 макроса foor и foor1.
Указатель на объект.
Без обид, но с подобными макросами Вам еще рано, нахлебаетесь. Для начала поймите, зачем я вот так сделал: