C ++ Vererbung - unzugängliche Basis?

157

Ich kann anscheinend keine Basisklasse als Funktionsparameter verwenden. Habe ich meine Vererbung durcheinander gebracht?

Ich habe folgendes in meinem Haupt:

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

Und die Klasse Bar, die so von Foo erbt:

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

private:
    //snip
};

Sollte das nicht funktionieren? Ich scheine nicht in der Lage zu sein, diesen Aufruf in meiner Hauptfunktion zu tätigen

Bandai
quelle

Antworten:

287

Das musst du machen:

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

Der Standard - Vererbungstyp eines classin C ++ ist private, so dass jeder publicund protectedMitglieder aus der Basisklasse zu beschränken private. structDie Vererbung ist dagegen publicstandardmäßig.

Andrew Noyes
quelle
28

Standardmäßig ist die Vererbung privat. Sie müssen explizit verwenden public:

class Bar : public Foo

Jim Buck
quelle
14
So erweitern Sie: In a class ist Vererbung private. In a structist die Vererbung publicstandardmäßig.
Travis Gockel