Kế thừa C ++ - cơ sở không thể tiếp cận?


157

Tôi dường như không thể sử dụng một lớp cơ sở như là một tham số hàm, tôi đã làm hỏng kế thừa của mình chưa?

Tôi có những điều sau đây trong chính của mình:

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
};

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

Câu trả lời:


287

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

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

Kiểu thừa kế mặc định của a classtrong C ++ là private, vì vậy bất kỳ publicprotectedcác thành viên từ lớp cơ sở đều bị giới hạn private. structmặt khác, kế thừa là publicmặc định.


28

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

class Bar : public Foo


14
Để mở rộng: Trong a class, thừa kế là private. Trong một struct, thừa kế publictheo mặc định.
Travis Gockel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.