Herencia de C ++: ¿base inaccesible?


157

Parece que no puedo usar una clase base como parámetro de función, ¿he estropeado mi herencia?

Tengo lo siguiente en mi principal:

int some_ftn(Foo *f) { /* some code */ };
Bar b;
some_ftn(&b);

Y la clase Bar hereda de Foo de tal manera:

class Bar : Foo
{
public:
    Bar();
    //snip

private:
    //snip
};

¿No debería funcionar esto? Parece que no puedo hacer esa llamada en mi función principal

Respuestas:


287

Tienes que hacer esto:

class Bar : public Foo
{
    // ...
}

El tipo de herencia predeterminado de a classen C ++ es private, por lo que cualquiera publicy los protectedmiembros de la clase base están limitados a private. structLa herencia por otro lado es publicpor defecto.


28

Por defecto, la herencia es privada. Tienes que usar explícitamente public:

class Bar : public Foo


14
Para expandir: En a class, la herencia es private. En a struct, la herencia es publicpor defecto.
Travis Gockel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.