No se puede instanciar directamente una instancia de una clase abstracta, sino que se debe instanciar una instancia de una subclase totalmente implementada.
Así que esto es legal:
Housecat* theCats = new Housecat[200];
y entonces usted puede acceder a cada gato a través de la interfaz del gato
bool catsMeow = ((Cat*)(&theCats[0]))->CanMeow();
Pero el compilador no tiene forma de saber cómo crear una instancia de una clase abstracta; de hecho, el hecho de que sea abstracto significa que no puede ser instanciado directamente.
¿Por qué hacer esto? Porque Cat tendrá un método abstracto
bool CanMeow() = 0;
que todos los gatos heredados deben implementar. Luego puedes preguntar si puede maullar, con la posibilidad de que una instancia de Lion devuelva false.