C ++ kalıtım - erişilemez taban?


157

Bir temel sınıf işlev parametresi olarak kullanamıyor gibi görünüyor, miras berbat mı?

Ana alanımda aşağıdakiler var:

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

Ve Foo'dan miras alan Bar sınıfı:

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

private:
    //snip
};

Bu işe yaramaz mı? Ana fonksiyonumda o çağrıyı yapamıyorum

Yanıtlar:


287

Bunu yapmak zorundasın:

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

classC ++ 'da a'nın varsayılan devralma türü private, bu nedenle temel sınıftaki tüm üyeler publicve protectedüyelerle sınırlıdır private. structdiğer yandan miras publicvarsayılan olarak.


28

Varsayılan olarak, devralma özeldir. Açıkça kullanmanız gerekir public:

class Bar : public Foo


14
Genişletmek için: a class, miras private. A structöğesinde, publicvarsayılan olarak kalıtım kullanılır .
Travis Gockel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.