Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
просмотрел результаты своей битвы с кодом в стиле ООП - хм... превосходно! ))))
вопрос появился, а вот у меня в коде ну раза три точно используется конструкция вида:
вызовы все в privat методах, но есть ли "джедайский прием ?" чтобы уйти в тексте исходника от CheckPointer(m_order)==POINTER_INVALID
я про некие гет / сет спрашиваю
проблем особых нет, но так сказать прихоть, ну или пока еще не утихла жажда познания приемов ООП в С++
Если вопрос в "много букв", то !CheckPointer(mPtr), а если в вызове функции, то в конструкторе инициализируете все указатели NULL и в коде сравниваете с ним, не забывая при delete ptr; ptr=NULL;
просмотрел результаты своей битвы с кодом в стиле ООП - хм... превосходно! ))))
вопрос появился, а вот у меня в коде ну раза три точно используется конструкция вида:
вызовы все в privat методах, но есть ли "джедайский прием ?" чтобы уйти в тексте исходника от CheckPointer(m_order)==POINTER_INVALID
я про некие гет / сет спрашиваю
проблем особых нет, но так сказать прихоть, ну или пока еще не утихла жажда познания приемов ООП в С++
Игорь, посмотрите этот пример, по моему то что вы спрашиваете.
Если вопрос в "много букв", то !CheckPointer(mPtr), а если в вызове функции, то в конструкторе инициализируете все указатели NULL и в коде сравниваете с ним, не забывая при delete ptr; ptr=NULL;
Ну и вот это, для сахара:
проблем особых нет, но так сказать прихоть, ну или пока еще не утихла жажда познания приемов ООП в С++
Крайне рекомендую все поля класса инициализировать в конструкторе значениями по умолчанию. Смысл в том, что если вы захотите сделать так:
void foo(){ CClass someClass; someClass.DoSomething(); }
,то поля вашего класса никто инициализировать не будет и там будут мусорные значения.
Ну и вот это, для сахара:
нет, от defin-ов почти ушел, просто оборачивать не хочу ничего, как писал пару недель назад - пока хочу чистый код в стиле ООП посмотреть, оцениваю гибкость и возможности
ЗЫ: в define только обернул потомков при создании, чтобы не писать однотипную инициализацию на 3 строки, так проще потом добавлять методы, т.е. в исходном коде коде по одной строке пока
Игорь, посмотрите этот пример, по моему то что вы спрашиваете.
нет, я про аналог в C# - оператор ?? ( оператор null-объединения ), что то похожее по логике хочу посмотреть в стиле С++
UPD:
Крайне рекомендую все поля класса инициализировать в конструкторе значениями по умолчанию. Смысл в том, что если вы захотите сделать так:
,то поля вашего класса никто инициализировать не будет и там будут мусорные значения.
так и сделал, конструктор с инициализацией всего и вся в базовом классе, потомки инициализируют базовый класс:
именно это и в макрос обернул, чтобы не забыть правильно проинициализировать )))
нет, от defin-ов почти ушел, просто оборачивать не хочу ничего, как писал пару недель назад - пока хочу чистый код в стиле ООП посмотреть, оцениваю гибкость и возможности
ЗЫ: в define только обернул потомков при создании, чтобы не писать однотипную инициализацию на 3 строки, так проще потом добавлять методы, т.е. в исходном коде коде по одной строке пока
нет, я про аналог в C# - оператор ?? ( оператор null-объединения ), что то похожее по логике хочу посмотреть в стиле С++
От препроцессора зря отказываешься. Наряду с шаблонами - это сильнейшие инструменты. Аналога оператора ?? похоже просто не существует. С++ в этом плане хардкорнее.
у меня пока битва за чистый стиль ООП, хочу приемы ООП все познать, пока актив на форуме есть ;)
по препроцессору поднял свой уровень, но ... по моему не стоит злоупотреблять, по крайней мере не мой стиль, могу накосячить, а код со множественными макроподстановками точно не смогу прочитать быстро, а как искать баги... ну проще заново переписать - в общем пока не нужно
шаблоны... ну то что предлагают разработчики в СБ, совсем не понравилось, все пересмотрел, сложно сказать для каких целей их в СБ включили, возможно время их еще не пришло
про портирование шаблонов С++ в MQL - это время, как показало обсуждение, что в большинстве своем шаблоны С++ требуют доработки "напильником" для MQL - тут проще вернуться в .dll и не мучить MQL )))
у меня пока битва за чистый стиль ООП, хочу приемы ООП все познать, пока актив на форуме есть ;)
по препроцессору поднял свой уровень, но ... по моему не стоит злоупотреблять, по крайней мере не мой стиль, могу накосячить, а код со множественными макроподстановками точно не смогу прочитать быстро, а как искать баги... ну проще заново переписать - в общем пока не нужно
шаблоны... ну то что предлагают разработчики в СБ, совсем не понравилось, все пересмотрел, сложно сказать для каких целей их в СБ включили, возможно время их еще не пришло
про портирование шаблонов С++ в MQL - это время, как показало обсуждение, что в большинстве своем шаблоны С++ требуют доработки "напильником" для MQL - тут проще вернуться в .dll и не мучить MQL )))
Так шаблоны можно и самому писать.)))
угу )))
долистал окончательно хелп, пропустил override , благо все в макросе, правок, ну ровно в один копипаст
UPD:
нет, не так, сам зачем то вылез за контроль прав доступа, нет необходимости в public методе!
Ну и вот это, для сахара:
хотел написать как было раньше у меня вместо
было так:
но вспомнил как проверить макроподстановки в MQL
2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1
2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID = 0
2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0
и если мне не изменяет память, то в начале года можно было распринтовать NULL в лог и получить там 0 , сейчас ошибку выдает
т.е. поведение NULL как бы не должно измениться в дальнейшем, но что там подставляется вместо NULL не понятно, наверное если эту ситуацию сейчас проверил, то как написал if( CheckPointer(m_order)==POINTER_INVALID ) то это так сказать правильной код )))