2010-10-31 11 views
6

Decir que tengo una clase base:No llamar al constructor de la clase base de la clase derivada

class baseClass 
{ 
    public: 
baseClass() { }; 

}; 

Y una clase derivada:

class derClass : public baseClass 
    { 
     public: 
    derClass() { }; 

    }; 

Cuando creo una instancia de derClass el constructor de baseClass se llama . ¿Cómo puedo prevenir esto?

+1

Usted no lo hace; eso no tiene sentido. ¿Por qué crees que necesitas hacer esto? – GManNickG

+0

@GMan Tengo una clase base donde los datos se preparan con un encabezado en el constructor. La clase derivada no necesita un encabezado preparado, pero está llamando al constructor de la clase base que está preparando un encabezado y complica algunas cosas. – Brad

+3

Te estás perdiendo el punto de herencia. La herencia forma una relación "una A es una B". Si una B hace cosas que una A no debe hacer, entonces una A no es una B. –

Respuesta

3

Una instancia de clase base es una parte integral de cualquier instancia de clase derivada. Si construye con éxito una instancia de clase derivada, debe, por definición, construir todos los objetos de la clase base y los miembros, de lo contrario la construcción del objeto derivado habría fallado. La construcción de una instancia de clase base implica llamar a uno de sus constructores.

Esto es fundamental para el funcionamiento de la herencia en C++.

11

Haga el ctor vacío adicional.

struct noprapere_tag {}; 

class baseClass 
{ 
public: 
    baseClass() : x (5), y(6) { }; 

    baseClass(noprapere_tag) { }; // nothing to do 

protected: 
    int x; 
    int y; 

}; 

class derClass : public baseClass 
{ 
public: 
    derClass() : baseClass (noprapere_tag) { }; 

}; 
Cuestiones relacionadas