2012-03-24 18 views
9

¿Cómo crear una instancia de un objeto de clase derivado, cuya clase base ctor es privada?Crear una instancia de un objeto de clase derivado, cuya clase base ctor es privada

Dado que el ctor de clase derivado invoca implícitamente el ctor de clase base (que es privado), el compilador da error.

consideran este código de ejemplo a continuación:

#include <iostream> 

using namespace std; 

class base 
{ 
    private: 
     base() 
     { 
     cout << "base: ctor()\n"; 
     } 
}; 

class derived: public base 
{ 
    public: 
     derived() 
     { 
     cout << "derived: ctor()\n"; 
     } 
}; 

int main() 
{ 
    derived d; 
} 

Este código da el error de compilación:

accessing_private_ctor_in_base_class.cpp: In constructor derived::derived()': accessing_private_ctor_in_base_class.cpp:9: error: base::base()' is private accessing_private_ctor_in_base_class.cpp:18: error: within this context

¿Cómo puedo modificar el código para eliminar el error de compilación?

Respuesta

14

Hay dos maneras:

  • hacer que el constructor de la clase base, ya sea o publicprotected.
  • O bien, haga que la clase derivada sea friend de la clase base. ver demo
+1

@ Nawaz: hacer que la clase derivada sea un amigo de la clase base trabajado! –

1

No puede. Esa suele ser la razón para hacer que el único administrador sea privado, no permitir la herencia.

+0

Singletons también tiene un uso para eso. – chris

2

No puede heredar de una clase base cuyo único constructor es privado.

Haga que el constructor de la clase base sea público/protegido, o agregue otro constructor de la clase base.


1. A menos, como señala Nawaz, usted es un amigo de la clase base.

Cuestiones relacionadas