Ereditarietà C ++ - base inaccessibile?


157

Mi sembra di non essere in grado di utilizzare una classe base come parametro di funzione, ho incasinato la mia eredità?

Ho il seguente nel mio principale:

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

E la classe Bar eredita da Foo in questo modo:

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

private:
    //snip
};

Questo non dovrebbe funzionare? Non riesco a fare quella chiamata nella mia funzione principale

Risposte:


287

Devi fare questo:

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

Il tipo di ereditarietà predefinito di a classin C ++ è private, quindi qualsiasi publice protectedmembri della classe base sono limitati a private. structl'ereditarietà invece è publicdi default.


28

Per impostazione predefinita, l'ereditarietà è privata. Devi usare esplicitamente public:

class Bar : public Foo


14
Per espandere: In a class, l'ereditarietà è private. In a struct, l'ereditarietà è publicpredefinita.
Travis Gockel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.