Вы не можете напрямую создать экземпляр экземпляра абстрактного класса, но вместо этого должны создать экземпляр полностью реализованного подкласса.
Так что это законно:
Housecat* theCats = new Housecat[200];
и затем вы можете получить доступ к каждой кошке через интерфейс Cat
bool catsMeow = ((Cat*)(&theCats[0]))->CanMeow();
Но у компилятора нет возможности узнать, как создать экземпляр абстрактного класса; фактически тот факт, что он абстрактный, означает, что его нельзя непосредственно создать.
Зачем это? Потому что у Cat будет абстрактный метод
bool CanMeow() = 0;
Это должны реализовать все унаследованные кошки. Тогда вы можете спросить, может ли он мяукать, и есть вероятность, что экземпляр Льва вернет ложь.