Herança C ++ - base inacessível?


157

Eu pareço incapaz de usar uma classe base como parâmetro de função. Eu estraguei minha herança?

Eu tenho o seguinte no meu principal:

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

E a classe Bar herdada de Foo de tal maneira:

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

private:
    //snip
};

Isso não deve funcionar? Parece que não consigo fazer essa ligação na minha função principal

Respostas:


287

Você tem que fazer isso:

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

O tipo padrão de herança de um classem C ++ é private, portanto, qualquer publice protectedmembros da classe base estão limitados a private. structa herança, por outro lado, é publicpor padrão.


28

Por padrão, a herança é privada. Você precisa usar explicitamente public:

class Bar : public Foo


14
Para expandir: Em a class, herança é private. Em a struct, a herança é publicpor padrão.
Travis Gockel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.