C ++ inheritance - basis tidak dapat diakses?

157

Saya sepertinya tidak dapat menggunakan kelas dasar sebagai parameter fungsi, sudahkah saya mengacaukan warisan saya?

Saya memiliki yang berikut ini di main saya:

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

Dan class Bar mewarisi dari Foo sedemikian rupa:

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

private:
    //snip
};

Haruskah ini tidak berhasil? Saya sepertinya tidak bisa melakukan panggilan itu dalam fungsi utama saya

bandai
sumber

Jawaban:

287

Anda harus melakukan ini:

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

Tipe bawaan default dari a classdi C ++ adalah private, jadi siapa saja publicdan protectedanggota dari kelas dasar dibatasi private. structwarisan di sisi lain publicsecara default.

Andrew Noyes
sumber
28

Secara default, warisan adalah pribadi. Anda harus menggunakan public:

class Bar : public Foo

Jim Buck
sumber
14
Untuk memperluas: Dalam class, warisan adalah private. Dalam struct, warisan secara publicdefault.
Travis Gockel