Можно ли программно определить тип пиременной ? - страница 4

 
Dmitry Fedoseev:
Не помните какие конкретно статьи читали?

https://www.mql5.com/ru/articles/351

https://www.mql5.com/ru/articles/70

https://www.mql5.com/ru/articles/703

То что в закладках держу

Основы объектно-ориентированного программирования
Основы объектно-ориентированного программирования
  • 2011.12.06
  • Dmitry Fedoseev
  • www.mql5.com
Для использования объектно-ориентированного программирования (ООП) вовсе не обязательно знать что такое полиморфизм, инкапсуляция... можно просто пользоваться его возможностями. В статье рассматриваются основные возможности ООП с примерами их использования.
 
Vladimir Pastushak:

....

Не могу понять что плохого в передаче структуры по ссылке ?

А какой в этом смысл? Вы передаете в метод класса экземпляр этого же класса. 

Намного понятнее работать с полями класса которые уже объявлены в этом классе.

class C
{
  string name;
  void SetName(string Name)
};

void C::SetName(string Name)
{
  if (name!=Name) name=Name;
}
 
Vladimir Pastushak:

1. Я понял Вас, действительно, если переменная обозначена как дабл то хоть бубен треси она даблом и останется...

2. Не могу понять что плохого в передаче структуры по ссылке ?

1. Если одна переменная дабл и в ней может быть и дабл и инт, тогда следует сделать дополнительную переменную типа bool, при установке значения в переменную StopLoss ставить этой переменной соответствующее  значение, потом делать расчеты в зависимости от значения bool.

2. Ничего плохого, просто незачем. Можно свой метод вызывать.  В методе  SetOrderModify параметры из самого класса использовать. Вот тут при установке параметров можно будет использовать перегрузку. Метод, ну например, SetStopLoss(), его перегрузить.

 
Vitalii Ananev:

Почему, долго вам же не надо изучать программирование с нуля. 

Вот обратите внимание,  перегруженная функция. Можно передать значения тейка и стопа как в пунктах так и указав конкретную цену. Очень облегчает дальнейшую работу. Кроме того вы наверно видели, что и стандартные функции MQL тоже по большей части перегруженные.

Да я вижу и понимаю, но перед вызовом метода у вас нужно вызвать пачку других методов, другими словами большая подготовка к открытию ордера, чем больше код тем больше вероятность ошибки,

то как я пользую мне нравится потому что просто и понятно и нет ничего лишнего...

 
Хороший наборчик. Если их все внимательно прочитать и освоить, можно почти ассом в ООП стать.
 
Dmitry Fedoseev:

1. Если одна переменная дабл и в ней может быть и дабл и инт, тогда следует сделать дополнительную переменную типа bool, при установке значения в переменную StopLoss ставить этой переменной соответствующее  значение, потом делать расчеты в зависимости от значения bool.

2. Ничего плохого, просто незачем. Можно свой метод вызывать.  В методе  SetOrderModify параметры из самого класса использовать. Вот тут при установке параметров можно будет использовать перегрузку. Метод, ну например, SetStopLoss(), его перегрузить.

Я понял , то есть если мы вызываем класс то переменные класса используются в медодах ...

Да я понял Вас , спасибо...

 
Vladimir Pastushak:

Да я вижу и понимаю, но перед вызовом метода у вас нужно вызвать пачку других методов, другими словами большая подготовка к открытию ордера, чем больше код тем больше вероятность ошибки,

то как я пользую мне нравится потому что просто и понятно и нет ничего лишнего...

Да нет же. Вы же заполняете класс который передаете в метод SetOrderModify, после заполнения надо вызывать у того же класса метод SetOrderModify(), а не передавать в другой экземпляр. Проще получается и понятней.
 
Vladimir Pastushak:

Да я вижу и понимаю, но перед вызовом метода у вас нужно вызвать пачку других методов, другими словами большая подготовка к открытию ордера, чем больше код тем больше вероятность ошибки,

то как я пользую мне нравится потому что просто и понятно и нет ничего лишнего...

Я вам показал только заголовочную часть часть класса, а реализацию самих методов я не показывал, иначе это бы заняло пару страниц форума. И перед вызовом какого либо метода не надо вызывать другие методы, они все работают независимо друг от друга.
 

Правильно ли я понял что у данных классов будет один и тот же результат ?

class primer1
{
int seti;
int geti;
bool func(int & z)
};

bool primer1 :: func(int & z)
{
z.geti=z.seti;
return true;
}
//----
class primer2
{
int seti;
int geti;
bool func()
};

bool primer2 :: func()
{
geti=seti;
return true;
}
 
Vladimir Pastushak:

Правильно ли я понял что у данных классов будет один и тот же результат ?

Да. Надо делать как в primer2.
Причина обращения: