Definir el constructor predeterminado para la clase base abstracta

class ClassA {
public:
    ClassA() {} // when this function must be provided
    virtual ~ClassA() = 0 {}
};

class ClassB : public ClassA
{
    // ...        
};

Quiero saber cuándo se debe proporcionar el constructor predeterminado de una clase base abstracta.

preguntado el 28 de agosto de 11 a las 02:08

No creo que ser una clase abstracta básica tenga nada que ver con eso. Entonces, supongo que la respuesta sería "siempre que sea necesario", como cuando necesita poder construir su clase con y sin argumentos. -

Además, no puede tener un cuerpo en una función virtual pura (= 0 { }). -

@Seth Carnegie: En realidad, puedes tener un cuerpo en una función virtual pura.. (La sección llamada "1. Destructor virtual puro"es particularmente relevante aquí.) -

@In wow, qué diablos. ¿Qué diferencia en la tierra tiene el = 0 hacer entonces? Pensé que significaba subclases deber implementarlo porque la clase base no lo hace. -

@Seth Carnegie: Las clases todavía tendrán que anular todas las funciones virtuales puras antes de que se puedan instanciar, como siempre. Pero aún puede proporcionar una definición para que las subclases llamen. Lea el artículo vinculado de GotW # 31 para ver por qué alguien podría hacer eso. -

2 Respuestas

no hay conexión entre proporcionar un constructor predeterminado y la abstracción o no de la clase.

proporcione una definición de constructor predeterminada si necesita inicializar cosas.

proporcione una declaración no pública (posiblemente no implementada) si desea prohibir la construcción predeterminada.

salud y hth.,

Respondido 28 ago 11, 06:08

Si realmente es una clase base abstracta sin miembros de datos, el constructor generado por el compilador será totalmente suficiente en todos los casos.

Las clases derivadas siempre llamarán al constructor de clase base predeterminado a menos que su constructor especifique uno diferente en la lista de inicializadores.

Respondido 28 ago 11, 06:08

¿No diría que ese es también el caso (en el mismo grado, de todos modos) para una clase no abstracta sin miembros de datos? - Saludos y hth. - Alf

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.