Bạn có thể giải thích tại sao mã sau đây biên dịch và hoạt động tốt (được kiểm tra trên gcc-4.3.4). Tôi nghĩ rằng kế thừa chọn lọc không thể làm suy yếu hoặc thậm chí tăng cường quyền truy cập vào các thành viên/phương pháp. Nó không phá vỡ các quy tắc đóng gói?Thừa kế chọn lọc C++
#include <iostream>
class A {
protected:
void foo() { std::cout << "foo" << std::endl; }
};
class B : private A {
public:
using A::foo; //foo() becomes public?!
};
int main() {
B b;
b.foo();
return 0;
}
+1 để dạy tôi điều gì đó. –
Bạn thực hiện việc này khi kế thừa riêng tư từ các vùng chứa tiêu chuẩn. Về cơ bản, bạn cấm upcasting (điều này ngụ ý rằng bạn không cần một destructor ảo), nhưng bạn cho phép một số hoạt động mà sẽ là tẻ nhạt để reimplement/forward. –