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

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.


28

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

class Bar : public Foo


14
Aby rozwinąć: w a class, dziedziczenie jest private. W a structdziedziczenie jest publicdomyślne.
Travis Gockel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.