Chr*_*ski 13 c++ protected member superclass
我得到一个编译错误,我有点困惑.这是在VS2003上.
错误C2248:'A :: y':无法访问在类'A'中声明的受保护成员
class A
{
public:
A() : x(0), y(0) {}
protected:
int x;
int y;
};
class B : public A
{
public:
B() : A(), z(0) {}
B(const A& item) : A(), z(1) { x = item.y;}
private:
int z;
};
Run Code Online (Sandbox Code Playgroud)
问题是x = item.y;
访问权限被指定为受保护.为什么B类的构造函数不能访问A :: y?
这是因为:
class base_class
{
protected:
virtual void foo() { std::cout << "base::foo()" << std::endl; }
};
class A : public base_class
{
protected:
virtual void foo() { std::cout << "A::foo()" << std::endl; }
};
class B : public base_class
{
protected:
virtual void foo() { std::cout << "B::foo()" << std::endl; }
public:
void bar(base_class *b) { b->foo(); }
};
Run Code Online (Sandbox Code Playgroud)
如果这是合法的,你可以这样做:
A a;
B b;
b.bar(&a);
Run Code Online (Sandbox Code Playgroud)
并且您protected将从B 调用A 的成员,这是不允许的.