Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1323

 
есть возможность EMPTY_VALUE в печать выводить как "EMPTY_VALUE" вместо значения 1797......?
 
Fast235:
есть возможность EMPTY_VALUE в печать выводить как "EMPTY_VALUE" вместо значения 1797......?

подробнее...код

"EMPTY_VALUE" не может быть 1797......

 
MakarFX:
подробнее...код
while(CopyBuffer(handle,buffer_num,Start_bar,Count_bar,buffer) == Count_bar && !_StopFlag)
        {
         //--- в цикле проверяем номера буфера
         for(int ii=0; ii<Count_bar; ++ii)
            result_output +="\n"+name
                            +"["+IntegerToString(buffer_num)+"]"
                            +"["+IntegerToString(ii)+"]"
                            +"="+DoubleToString(buffer[ii],_Digits);
 
Fast235:
а что именно надо на принт?
 
MakarFX:
а что именно надо на принт?

спасибо,

там только в одном месте может быть  EMPTY_VALUE ))

 
Fast235:

спасибо,

там только в одном месте может быть  EMPTY_VALUE ))

Я не такой спец, как вы, но...

if( result_output>0) Print( result_output );

else

Print( "EMPTY_VALUE" ); 
 
class TestClass
{
  private:
    double cValue1;
  public:
    double Value1()
    {return cValue1;}

    void SetValue1(int param,double value)
    {
      if(param>0)cValue1=value;
    }
};

void TestFunction()
{
  TestClass test;
  test.SetValue1(1,0.5);
}

Хотелось бы вместо

test.SetValue1(1,0.5);

иметь возможность использовать запись

test.Value1(1)=0.5;

Подозреваю, что, если это возможно, то с помощью перегрузки. Но не хватает знаний и фантазии.

Если это возможно, подскажите пожалуйста, как это реализовать.

 
Yurij Kozhevnikov:

Хотелось бы вместо

иметь возможность использовать запись

Подозреваю, что, если это возможно, то с помощью перегрузки. Но не хватает знаний и фантазии.

Если это возможно, подскажите пожалуйста, как это реализовать.

class TestClass
{
  private:
    double cValue1;
  public:
    double Value1()
    {return cValue1;}

    void SetValue1(int param,double value)
    {
      if(param>0)cValue1=value;
    }
    void operator=(const double value) { cValue1 = value; }
};
//+------------------------------------------------------------------+
void OnStart()
{
   TestClass t;
   t = 123.456;
   Print("Value1() = ", t.Value1());      // Value1() = 123.456
}
//+------------------------------------------------------------------+

https://www.mql5.com/ru/docs/basis/function/operationoverload

Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

Спасибо, такая реализация мне приходила в голову, но это не совсем то из-за отсутствия собственно Value1. То есть созданный мной пример конечно предельно упрощён, но подразумевается, что это не основное значение класса, что таких значений может быть некоторое количество и что для каждого можно описать такую конструкцию.

Или для такой реализации возможно описать только отдельный класс или структуру, в которой и реализовывать перегрузку, а в данном классе описывать переменные созданного типа? Но, если в операции присваивания участвуют другие переменные класса, то опять же не складывается.

Собственно, я хотел реализовать что-то подобное методам Let/Set/Get в vbs.

"Property Let/Set/Get" Procedures
  • www.herongyang.com
This section provides a tutorial example on how to use 'Property Let/Set/Get' procedure to define public properties.  Properties defined through public variables are simple to use. But you can not use them to update internal variables or other properties when their values are changes. A better way to define public properties is to use...
 
Fast235:
есть возможность EMPTY_VALUE в печать выводить как "EMPTY_VALUE" вместо значения 1797......?

просто перегрузи DoubleToString, если емпти валу то возращает строку "EMPTY_VALUE" , иначе вызов  ::DoubleToString