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.