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

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.


28

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

class Bar : public Foo


14
Untuk memperluas: Dalam class, warisan adalah private. Dalam struct, warisan secara publicdefault.
— Travis Gockel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.