2011-04-18 19 views
5

Supongamos foo es un resumen class en un programa en C++, ¿por qué es aceptable para declarar variables de tipo foo*, pero no de tipo foo?declaraciones de clases abstractas en C++

+0

También puede declarar referencias para clases abstractas como 'foo &'. – iammilind

+0

Porque quiero manipular genéricamente objeto de tipo de forma (por lo tanto, necesito un puntero o referencia a una forma). Pero definitivamente no quiero objetos de forma tipo ya que esta es una abstracción. Necesito objetos que sean cuadrados o círculos. –

Respuesta

12

Porque si declara un foo debe inicializarlo/instanciarlo. Si declara un * foo, puede usarlo para apuntar a instancias de clases que heredan de foo pero no son abstractas (y así pueden crearse instancias)

0

Porque un puntero a un foo no es un foo - están completamente diferentes tipos. Hacer un resumen de clase dice que no puede crear objetos del tipo de clase, no que no puede crear punteros (o referencias) para la clase.

1

Asimismo, puesto que las clases abstractas se utilizan generalmente como padres (clases base - de ABC), que se utiliza para polymorphisem

class Abstract {} 

class DerivedNonAbstract: public Abstract {} 


void CallMe(Abstract* ab) {} 


CallMe(new DerivedNonAbstract("WOW!")); 
2

No se puede crear una instancia de una clase abstracta. Y hay diferencias entre las siguientes declaraciones.

// declares only a pointer, but do not instantiate. 
// So this is valid 
AbstractClass *foo; 

// This actually instantiate the object, so not valid 
AbstractClass foo; 

// This is also not valid as you are trying to new 
AbstractClass *foo = new AbstractClass(); 

// This is valid as derived concrete class is instantiated 
AbstractClass *foo = new DerivedConcreteClass(); 
0

Porque si declaramos que foo Meanz estamos creando una instancia de la clase foo que es un resumen, y es imposible crear la instancia de una clase abstracta. Sin embargo, podemos utilizar el puntero de una clase abstracta para apuntar a sus clases de unidad para aprovechar las ventajas del polimorfismo. . .

Cuestiones relacionadas