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

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.


28

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

class Bar : public Foo


14
Pour développer: Dans a class, l'héritage est private. Dans a struct, l'héritage est publicpar défaut.
Travis Gockel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.