Dziedziczenie C ++ - niedostępna podstawa?

157

Wydaje mi się, że nie mogę użyć klasy bazowej jako parametru funkcji, czy popsułem moje dziedziczenie?

Mam następujące główne:

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

A klasa Bar dziedzicząca po Foo w taki sposób:

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

private:
    //snip
};

Czy to nie powinno działać? Wydaje się, że nie mogę wykonać tego połączenia w mojej głównej funkcji

bandai
źródło

Odpowiedzi:

287

Musisz to zrobić:

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

Domyślny typ dziedziczenia a classw C ++ to private, więc wszystkie elementy członkowskie publici protectedz klasy bazowej są ograniczone do private. structz drugiej strony dziedziczenie jest publicdomyślne.

Andrew Noyes
źródło
28

Domyślnie dziedziczenie jest prywatne. Musisz jawnie użyć public:

class Bar : public Foo

Jim Buck
źródło
14
Aby rozwinąć: w a class, dziedziczenie jest private. W a structdziedziczenie jest publicdomyślne.
Travis Gockel