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

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.


28

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

class Bar : public Foo


14
So erweitern Sie: In a class ist Vererbung private. In a structist die Vererbung publicstandardmäßig.
Travis Gockel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.