Hãy xem xét đoạn mã sau:Thay đổi chức năng Chế độ truy cập trong lớp có nguồn gốc
struct Base
{
virtual ~Base() {}
virtual void Foo() const = 0; // Public
};
class Child : public Base
{
virtual void Foo() const {} // Private
};
int main()
{
Child child;
child.Foo(); // Won't work. Foo is private in this context.
static_cast<Base&> (child).Foo(); // Okay. Foo is public in this context.
}
là hợp lệ trong C++ này? "Điều này" đang thay đổi chế độ truy cập của hàm ảo trong lớp dẫn xuất.
... Đã biên dịch và chạy chưa? – AndyG
@SauceMaster, Đó không phải là một dấu hiệu rất tốt cho dù mã là hợp pháp trong C + +. Có rất nhiều tải và mã C++ sẽ biên dịch và chạy, nhưng vẫn gọi hành vi không xác định. Thay đổi trình biên dịch, cờ biên dịch, phiên bản trình biên dịch và sự bùng nổ, nó ngừng hoạt động. – Glen
Đồng ý với Glen. Đó là lý do tôi hỏi ở đây. – hlx236sk