2011-01-31 35 views
103

Tôi dường như không thể sử dụng một lớp cơ sở như là một tham số chức năng, tôi đã sai lầm thừa kế của tôi?Thừa kế C++ - cơ sở không thể tiếp cận?

Tôi đã điều sau đây trong chính của tôi:

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

Và lớp Bar kế thừa từ Foo theo cách như vậy:

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

private: 
    //snip 
}; 

nên này không hoạt động? Tôi dường như không có khả năng thực hiện cuộc gọi trong chức năng chính của tôi

Trả lời

199

Bạn phải làm điều này:

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

Kiểu thừa kế mặc định của một class trong C++ là private, vì vậy bất kỳ publicprotected các thành viên từ lớp cơ sở được giới hạn ở private. Mặt khác, struct thừa kế là public theo mặc định.

19

Theo mặc định, kế thừa là riêng tư. Bạn phải sử dụng một cách rõ ràng public:

class Bar : public Foo

+9

Mở rộng: Trong một 'class', thừa kế là' private'. Trong 'struct', thừa kế là' public' theo mặc định. –

Các vấn đề liên quan