Héritage C ++ - base inaccessible?

157

Il semble que je ne puisse pas utiliser une classe de base comme paramètre de fonction, ai-je gâché mon héritage?

J'ai ce qui suit dans ma main:

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

Et la classe Bar héritant de Foo de telle manière:

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

private:
    //snip
};

Cela ne devrait-il pas fonctionner? Je ne semble pas pouvoir passer cet appel dans ma fonction principale

Bandai
la source

Réponses:

287

Tu dois faire ca:

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

Le type d'héritage par défaut de a classen C ++ est private, donc toutpublicprotected membres et de la classe de base sont limités à private. structl'héritage, par contre, est publicpar défaut.

Andrew Noyes
la source
28

Par défaut, l'héritage est privé. Vous devez utiliser explicitement public:

class Bar : public Foo

Jim Buck
la source
14
Pour développer: Dans a class, l'héritage est private. Dans a struct, l'héritage est publicpar défaut.
Travis Gockel