Nov*_*per 10 c++ inheritance class protected
请考虑以下示例
class base
{
protected :
int x = 5;
int(base::*g);
};
class derived :public base
{
void declare_value();
derived();
};
void derived:: declare_value()
{
g = &base::x;
}
derived::derived()
:base()
{}
Run Code Online (Sandbox Code Playgroud)
根据知识,只有基类的朋友和派生类可以访问基类的受保护成员,但在上面的示例中,我得到以下错误,"Error C2248 'base::x': cannot access protected member declared in class "但是当我添加以下行时
friend class derived;
Run Code Online (Sandbox Code Playgroud)
声明它是朋友,我可以访问基类的成员,我在声明派生类时做了一些基本的错误吗?
son*_*yao 11
派生类protected只能通过派生类的上下文访问基类的成员.换句话说,派生类不能通过protected基类访问成员.
当形成指向受保护成员的指针时,它必须在其声明中使用派生类:
Run Code Online (Sandbox Code Playgroud)struct Base { protected: int i; }; struct Derived : Base { void f() { // int Base::* ptr = &Base::i; // error: must name using Derived int Base::* ptr = &Derived::i; // okay } };
你可以改变
g = &base::x;
Run Code Online (Sandbox Code Playgroud)
至
g = &derived::x;
Run Code Online (Sandbox Code Playgroud)