g++
từ chối tôi truy cập vào một loại, chỉ vì nó xảy ra là một người cha riêng tư. Điều này có nghĩa không?Loại không thể tiếp cận do thừa kế riêng
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
Biên soạn sản lượng này:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
Quan điểm của tôi là: Tôi không bao giờ muốn để truy cập A
như một tổ tiên. Trên thực tế, nếu A
là tổ tiên riêng của B
, điều này không nên hoàn toàn ẩn đối với bất kỳ ai trừ B
(ví dụ: C
)?
Tất nhiên, tôi có thể sử dụng thừa kế protected
nhưng trong trường hợp của tôi, điều đó thực sự không có ý nghĩa.
Nó không phải là một tính năng ngu ngốc chút nào; nó cho phép người dùng hạn chế giao diện được kế thừa bằng cách chọn riêng các hàm để lộ ra bằng 'using'. – avakar
Bạn có thể làm gì với các chức năng giao nhận với tính năng ra ngoài và làm cho mô hình kế thừa C++ ít lộn xộn hơn. thừa kế riêng không thừa kế thành phần của nó và sử dụng cùng ngữ nghĩa để hoàn thành hai khái niệm riêng biệt chỉ gây nhầm lẫn. – rerun
Đó là sự khác biệt giữa thành phần và thừa kế riêng, bởi vì sau này cho phép bạn truy cập vào các thành viên được bảo vệ của cha bạn trong khi người cũ không. – bitmask