Đây là một mẫu mã mà làm phiền tôi:Cách truy cập phương thức được bảo vệ trong lớp cơ sở từ lớp dẫn xuất?
class Base {
protected:
virtual void foo() = 0;
};
class Derived : public Base {
private:
Base *b; /* Initialized by constructor, not shown here
Intended to store a pointer on an instance of any derived class of Base */
protected:
virtual void foo() { /* Some implementation */ };
virtual void foo2() {
this->b->foo(); /* Compilator sets an error: 'virtual void Base::foo() is protected' */
}
};
Làm thế nào để bạn truy cập vào các chức năng overrided được bảo vệ?
Cảm ơn sự giúp đỡ của bạn. : o)
Tôi không nghĩ rằng việc triển khai của bạn là hoàn toàn đúng. Tại sao bạn có một thể hiện của Base như một biến thành viên? this-> b-> foo() sẽ cố gắng gọi một phương thức ảo thuần túy. – GWW
Chương trình này không được biên dịch. Bạn không thể khởi tạo một lớp trừu tượng .... Trừ khi 'b' trỏ đến một cá thể của một số lớp khác có nguồn gốc từ' Base'. – 341008
Tôi bỏ qua độ chính xác: thuộc tính Derived :: b nhằm lưu trữ bất kỳ cá thể nào của các lớp dẫn xuất từ Base –