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

bandai
fonte

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.

Andrew Noyes
fonte
28

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

class Bar : public Foo

Jim Buck
fonte
14
Para expandir: Em a class, herança é private. Em a struct, a herança é publicpor padrão.
Travis Gockel