我对这段代码有疑问:
class X {
protected:
int v;
};
class Y : protected X {
public:
Y() : v(0) {}
};
int main()
{
Y *y = new Y();
cout << y->v;
delete y;
return 0;
}
我非常确定它很好,因为 X 的 v 成员可以从 Y 访问,因为 Y 是受保护类的子类,该受保护类具有受保护成员( v ),但我有一个编译错误。 有人可以帮助我理解吗?谢谢!
你误解了
protected
是什么。它不是一种将基类中无法从外部访问的内容转变为派生类中每个人都可以访问的机制。它仅提供派生类访问权限:
class X {
public:
X(int v) : v(v) {}
protected:
int v;
};
class Y : public X {
public:
Y() : X(0) { // Base class initializes its members
std::cout << v; // OK
}
};
此外,您似乎将
protected
继承与创建成员 protected
混为一谈,我从上面删除了它。它并没有改变无法从外部访问v
的事实,我认为这超出了问题的范围。您应该阅读以下两者:受保护的成员和受保护的继承。