Ошибки, баги, вопросы - страница 1696

 
Vladimir Pastushak:

Есть 200 методов в родителе, на основе 10 методов из родительского класса создается класс потомок при дальнейшей работе я хочу видеть только 10 наследованных методов плюс те которые созданы в классе потомке, мне не нужны еще 190 методов которые никаким боком к текущему потомку не должны относиться. 

Например  есть базовый класс в котором описаны свойства фигур, ширина высота, углы, радиусы, цвета, площадь описаны все максимальные свойства.

На основе этих методов свойсв я делаю класс наследник круг в котором использую методы из родительского класса, радиус, цвет, площадь... Но мне тут углы и ширина не нужны ...

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

 

На вопрос почему именно так, родительский класс обладает группой методов которая общая для всех или общая для группы фигур например метод цвет, стиль. 

Не понял: этот вопрос - вопрос или недописанный ответ? Обычно делают так - в базовом классе общее, а потом в потомках добавляют частности. Зачем делать наоборот? Какая цель?

Но даже если не углубляться, то я уже предложил вариант - вставить промежуточный наследник, в котором все ненужные свойства и методы передвинуть в private часть.

 
Вопрос к администрации, когда можно будет увидеть новую актуальную статистику по сервисам?
 
Vladimir Pastushak:

Есть 200 методов в родителе, на основе 10 методов из родительского класса создается класс потомок при дальнейшей работе я хочу видеть только 10 наследованных методов плюс те которые созданы в классе потомке, мне не нужны еще 190 методов которые никаким боком к текущему потомку не должны относиться. 

Для этого нужно объявить наследование protected или private.  И затем переопределить нужные вам методы.

class naslednic_1 : protected roditel
  {
public:
   virtual int       two(void)   { return roditel::two(); }
   virtual int       three(void) { return roditel::three(); }
  };
 
Alexey Navoykov:

Для этого нужно объявить наследование protected или private.  И затем переопределить нужные вам методы.

Stanislav Korotky:

Не понял: этот вопрос - вопрос или недописанный ответ? Обычно делают так - в базовом классе общее, а потом в потомках добавляют частности. Зачем делать наоборот? Какая цель?

Но даже если не углубляться, то я уже предложил вариант - вставить промежуточный наследник, в котором все ненужные свойства и методы передвинуть в private часть.

 Благодарю Вас.

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

 


 
Как узнать свой INDICATOR_SHORTNAME? IndicatorGet*-функций нет!
 
Alexey Kozitsyn:
А если изменять короткое имя при создании?

И каждый раз изменять?

Если индикатор содержит индикаторные буферы, то самоидентифицировать себя не сложно, а вот без буферов - не вижу пока решения.

 
fxsaber:
Как узнать свой INDICATOR_SHORTNAME? IndicatorGet*-функций нет!
 Print(MQLInfoString(MQL_PROGRAM_NAME)); возвращает короткое имя индикатора. Если короткое имя не задано - вернётся полное имя.
 
Karputov Vladimir:
 Print(MQLInfoString(MQL_PROGRAM_NAME)); возвращает короткое имя индикатора. Если короткое имя не задано - вернётся полное имя.
Спасибо.
 
Vladimir Pastushak:

 Благодарю Вас.

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

 


Не должно быть такого, код можете кинуть?

Те данные, что в родителе были protected и public будут protected при protected-наследовании .

	          
 
  1. Устанавливаем руками на ГОЛЫЙ чарт индикатор
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Удаляем руками индикатор с чарта.
  3. В логе видим, что индикатор продолжает выполняться. Можно закрыть все чарты в терминале, но он все равно будет выполняться. И это не поможет, конечно,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Перезагрузка терминала останавливает выполнение индикатора.
  5. Это сколько же может индикаторов выполняться вот так в холостую, а мы о них ни слухом, ни духом?! Контроля нет совсем.