Re[4]: ? Зачем виртуальный метод запрещает структурную иници
От: Sm0ke Россия ksi
Дата: 22.08.23 21:31
Оценка:
Здравствуйте, pokutan, Вы писали:

P>Здравствуйте, Sm0ke, Вы писали:


S>>Здравствуйте, pokutan, Вы писали:


P>>>думаю, вопрос немного в другой плоскости


P>>>читаем aggregate_initialization


P>>>An aggregate is one of the following types:


P>>>array type

P>>>class type (typically, struct or union), that has
P>>>.........
P>>>.........
P>>>no virtual member functions

P>>>тип агрегатор имеет кучу ограничений, среди прочего — не может иметь виртуальных методов


S>>я про это и написал.

S>>Но в чём причина добавлять такое ограничение в стандарт? Без него было бы лучше.

P>ну, наверное, это логично с точки зрения семантики, агрегатор — просто-напросто контейнер для разных данных, он не предполагает делегирования (ака переопределения в наследниках) операций для манипулирования этими данными


Скорее всего я не понял что вы написали

Но вот так же можно:
struct t_param
{
  bool flag;
  int count;
};

class t_object : public t_param
{
  t_object() : t_param{false, 1} {}
  virtual void ok() {}
};


? Так в чём проблема позволить и Это:
struct t_param
{
  bool flag;
  int count;

  virtual void ok() {}
};

class t_object : public t_param
{
public:
  t_object() : t_param{false, 1} {} // зачем-то ошибка компиляции
  void ok() override {}
};
Отредактировано 22.08.2023 21:33 Sm0ke . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.