w = new MyClass2[2];
Создает массив из двух MyClass2
объектов.Это типа MyClass2[2]
.Новое выражение возвращает указатель на начальный элемент этого массива, и вы присваиваете этот указатель w
.
w[1].check();
. Это обрабатывает w
как указатель на массив MyClass
объектов1010 * не как массив MyClass2
объектов.
Вы не можете обрабатывать массив объектов производного класса, как если бы он был массивом объектов базового класса.Если вы хотите использовать объекты производного класса, вам нужен массив указателей:
MyClass** w = new MyClass*[2];
w[0] = new MyClass2;
w[1] = new MyClass2;