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

 
Nikolai Semko #:

не могу избавится от якобы непрочитанных сообщений, хотя все прочитано.


Пролистай до конца список сообщений. Иногда старые вдруг становятся непрочитанными. Помечаются оранжевой точкой.

 
Artyom Trishkin #:

Пролистай до конца список сообщений. Иногда старые вдруг становятся непрочитанными. Помечаются оранжевой точкой.

Точняк! Сработало. Спасибо, Артем!

 
input double I1 = 1.1;
input double I2 = 2.2;

class C_Ind
{
  public: void Init ()
  {
    InitI ();
  }

  public: virtual int InitI () {return 0;}
};

class C_AVE1 : public C_Ind
{
  public: int InitI ()
  {
    double a = I1;
    Print (a);

    return 1;
  }
};

class C_AVE2 : public C_Ind
{
  public: int InitI ()
  {
    double a = I2;
    Print (a);

    return 1;
  }
};

void OnStart()
{
  C_AVE1 ave1;
  C_AVE2 ave2;

  C_Ind inds [2];// = {ave1, ave2}; //так нельзя
  inds [0] = ave1;
  inds [1] = ave2;

  for (int i = 0; i < 2; i++)
  inds [i].InitI ();
}
никак не получается заставить работать Print (), что я делаю не так?
 
Andrey Dik #:
никак не получается заставить работать Print (), что я делаю не так?
В базовом классе int InitI() виртуальный, а в производных - нет. Ты вызываешь метод базового класса получается.
 
Artyom Trishkin #:
В базовом классе int InitI() виртуальный, а в производных - нет. Ты вызываешь метод базового класса получается.

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

Сделал в производных функции тоже виртуальными (но этого делать не нужно как мне думается) - ничего не изменилось.

 
Andrey Dik #:

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

Сделал в производных функции тоже виртуальными (но этого делать не нужно как мне думается) - ничего не изменилось.

Я не у компа. Виртуальными методы должны быть во всех классах. С одинаковой сигнатурой. Только в этом случае вызов виртуального метода родительского класса вызовет соответствующий ему метод производного. 
 
Artyom Trishkin #:
Я не у компа. Виртуальными методы должны быть во всех классах. С одинаковой сигнатурой. Только в этом случае вызов виртуального метода родительского класса вызовет соответствующий ему метод производного. 

Откуда такие сведения?

Достаточно в базовом

 
Andrey Dik #:
никак не получается заставить работать Print (), что я делаю не так?
void OnStart()
{
  C_Ind* inds [] = {new C_AVE1, new C_AVE2};

  for (int i = 0; i < 2; i++)
  {
  inds [i].InitI ();
    delete inds[i];
  }    
}
 
удалось победить так:
input double I1 = 1.1;
input double I2 = 2.2;

class C_Ind
{
  public: virtual int Init () {return 0;}
};

class C_AVE1 : public C_Ind
{
  public: int Init ()
  {
    double a = I1;
    Print (a);

    return 1;
  }
};

class C_AVE2 : public C_Ind
{
  public: int Init ()
  {
    double a = I2;
    Print (a);

    return 1;
  }
};

void OnStart()
{
  C_Ind *ave1 = new C_AVE1 ();
  C_Ind *ave2 = new C_AVE2 ();

  C_Ind *inds [2];// = {ave1, ave2}; //так нельзя
  
  inds [0] = ave1;
  inds [1] = ave2;

  for (int i = 0; i < 2; i++)
  inds [i].Init ();
  
  for (int i = 0; i < 2; i++)
  delete inds [i];
}
 
fxsaber #:
о! пока писал пост - Вы раньше предложили.)
Ваш способ инициализации массива даже удобнее, спасибо!
Причина обращения: