2011-01-31 38 views
103

Bir alt sınıfı bir işlev parametresi olarak kullanamıyorum, kalıtımımı berbat ettim mi?C++ kalıtım - erişilemez taban?

benim ana aşağıdaki adres:

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

Ve öyle bir şekilde Foo devralmasını sınıf Bar:

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

private: 
    //snip 
}; 

Bu işe gerekmez mi?

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

C bir class ++ varsayılan devralma türü, yani herhangi public ve protectedprivate: Ben Bunu yapmak zorunda benim ana işlevi

cevap

199

bu çağrı yapmak mümkün görünmemektedir Temel sınıftan üyeler private ile sınırlıdır. struct devralma, varsayılan olarak public şeklindedir.

19

Varsayılan olarak miras özeldir. Açıkça public kullanmak zorunda:

class Bar : public Foo

+9

genişletmek için: a 'class' olarak, kalıtım private'' dır. Bir 'struct' içinde miras, varsayılan olarak "public" dir. –