Как получить массив из класса?

 

Как сделать правильный класс, что-бы в OnTick() я получал уже массив с ценами Ask?

class CMyTestArray
  {
protected:
   int               m_count;

public:
   double            ArrTest[];
   //+------------------------------------------------------------------+   
   int counter()
     {
      m_count++;
      ArrayResize(ArrTest,m_count);
      ArrTest[m_count-1]=Ask;

      //return(ArrTest); // ???
      return(m_count);
     }
  };
//+------------------------------------------------------------------+

CMyTestArray  Test;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Print(" --- Test.counter(): ",Test.counter());

   for(int i=0; i<ArraySize(ArrTest)-1; i++){Print(" --- Test.ArrTest(): ",Test.ArrTest[i]);} // ???

  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

Как сделать правильный класс, что-бы в OnTick() я получал уже массив с ценами Ask?

for(int i=0; i<ArraySize(Test.ArrTest)-1; i++){Print(" --- Test.ArrTest(): ",Test.ArrTest[i]);}

Только не понятно зачем делать публичный доступ к переменным класса.  

class CMyTestArray
  {
protected:
   
   double            ArrTest[];
public:
   
   //+------------------------------------------------------------------+   
   void counter()
     {
      
      int size = ArraySize(ArrTest);
      ArrayResize(ArrTest,size+1);
      ArrTest[size]=Ask;
     }
int Count()
{
   return(ArraySize(ArrTest)-1);
}
double GetArr(int index)
{
  if (index<=Count() && index>=0) return(ArrTest[index]);
  return(-1);//ошибка выход за пределы массива
}

  };
//+------------------------------------------------------------------+

CMyTestArray  Test;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Test.counter();

   for(int i=0; i<=Test.Count(); i++){Print(" --- Test.ArrTest(): ",Test.GetArr(i));} // ???

  }
И счетчик m_count в принципе тоже не нужен.
 
Vitalii Ananev:

Только не понятно зачем делать публичный доступ к переменным класса.  

И счетчик m_count в принципе тоже не нужен.

Большое спасибо!

Я так подумал что если я хочу этот массив получить за пределами класса, то надо делать публичный. В классах мне только первые шаги, не судите строго. :)
Есть мне простые примерчики с которых я начинаю и постепенно добавляю новые функций пока получаю себе нужный код. Но с массивами еще не било примерчиков и как раз этот тоже уйдет в мою копилку. :) Учусь я по этой статье, но иногда появляется вопросы.

 
Nauris Zukas:

Большое спасибо!

Я так подумал что если я хочу этот массив получить за пределами класса, то надо делать публичный. В классах мне только первые шаги, не судите строго. :)
Есть мне простые примерчики с которых я начинаю и постепенно добавляю новые функций пока получаю себе нужный код. Но с массивами еще не било примерчиков и как раз этот тоже уйдет в мою копилку. :) Учусь я по этой статье, но иногда появляется вопросы.

Понятно. Просто тот подход который вы применили противоречит принципам ООП. Поля класса должны быть скрыты от конечного пользователя. Обращение к этим полям должно быть реализовано в виде методов класса.

 
Vitalii Ananev:

Понятно. Просто тот подход который вы применили противоречит принципам ООП. Поля класса должны быть скрыты от конечного пользователя. Обращение к этим полям должно быть реализовано в виде методов класса.

Спасибо, буду иметь в виду.

Причина обращения: