Вопросы по ООП в MQL5 - страница 18

 

Подскажите, чем отличается ?
Создание объекта, или указателя, таким образом

class CClass
{
   public:


}CObj, *pCObj;

от классического создания

CClass  CObj;
CClass *CObj;

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

 
Roman:

Подскажите, чем отличается ?
Создание объекта, или указателя, таким образом

от классического создания

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

Ни чем не отличается, что в MQL, что в плюсах.

 
Koldun Zloy:

Ни чем не отличается, что в MQL, что в плюсах.

Вы не поняли вопрос. Отличие не в языках, а в самих объявлениях.
Мне не понятно поведение объекта из первого примера.
Мои догадки, объект создаётся так же на стеке, и уничтожается после вызова деструктора класса, и объект виден глобально в коде.
Вот это я и хотел уточнить, какое поведение у первого способа? 
Верны ли мои догадки?
Как он называется чтоб найти в гугле?

Так как заметил (не в mql, а в C++) что если по разному создать объект, то меняется поведение в используемых методах, не так как ожидалось. 

 
Roman:

Вы не поняли вопрос. Отличие не в языках, а в самих объявлениях.
Мне не понятно поведение объекта из первого примера.
Мои догадки, объект создаётся так же на стеке, и уничтожается после вызова деструктора класса, и объект виден глобально в коде.
Вот это я и хотел уточнить, какое поведение у первого способа? 
Верны ли мои догадки?
Как он называется чтоб найти в гугле?

Так как заметил что если по разному создать объект, то меняется поведение в используемых методах, не так как ожидалось. 

Я понял вопрос. Никакой разницы в объявлениях нет.

 
Koldun Zloy:

Я понял вопрос. Никакой разницы в объявлениях нет.

Разница скорее всего есть в области видимости.
Первый пример в одном файле виден всегда глобально, второй пример или new, можно прятать в функции.

 
Roman:

Разница скорее всего есть в области видимости.
Первый пример в одном файле виден всегда глобально, второй пример или new, можно прятать в функции.

Тут разница не в том как Вы объявите, а в том где.

 
Koldun Zloy:

Тут разница не в том как Вы объявите, а в том где.

Я тоже пришел к такому выводу, методом логического рассуждения :))
Хотелось убедится в правильности моих мыслей. Благодарю за пояснение.

 
Vladimir Simakov:
   lotDigits=MathMax(-(int)MathFloor(MathLog10(lotStep)),0);

проверил, не правильно работает этот код расчета кол-ва знаков после запятой

в принципе и мой тоже не всегда корректно считает, это я знаю

скрипт для проверки:

void OnStart()
  {
   double l=0.0;
   for(int i=0; i<100; i++)
     {
      Print(l," ---> LotDigits / MyDigits = ",LotDigits(l)," / ",MyDigits(l));
      l+=0.003;
     }
  }
//+------------------------------------------------------------------+
int LotDigits(double value)
  {
   return(MathMax(-(int)MathFloor(MathLog10(value)),0));
  }
//+------------------------------------------------------------------+
int MyDigits(double v)
  {
   long i=10000000,k=long(v/0.0000001);
   int d=0;
   while(d<7 && k%i>0)
     {
      i/=10;
      d++;
     }
   return(d);
  }
//+------------------------------------------------------------------+

лог скрипта приатачил

Файлы:
20190829.log  9 kb
 
Roman:

Подскажите, чем отличается ?
Создание объекта, или указателя, таким образом

от классического создания

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

Лично я тоже не вижу особой разницы, но сам стиль подобных написаний мне кажется достаточно опасный.

Указатель - должен сразу, при создании либо приравниваться к NULL, либо к указателю на реальный объект. Создается небольшая область памяти, в которой будет этот указатель храниться - то ли с нулевым значением, то ли с нормальным указателем.

Объявление же объекта - создает весь объект, при этом вызывается конструктор, выделяется память.

 
Igor Makanu:

проверил, не правильно работает этот код расчета кол-ва знаков после запятой

в принципе и мой тоже не всегда корректно считает, это я знаю

скрипт для проверки:

лог скрипта приатачил

У меня допущение, что лота, например 0.15, не будет. По крайней мере я про такое не слышал. Если вдруг увижу когда, то переделаю.
Причина обращения: