我是C ++的初学者。我今天有编程测试。但是我不明白这个例子。
class A
{
public:
int w;
};
class B : public A
{
public:
int x;
};
class C : private A
{
public: int y;
};
class D : protected B
{
public: int z;
};
int main()
{
D d;
d.w = 10; // compile error
}
我认为(D d; d.w = 10)是正确的,但是它有编译错误。
D由B(受保护)派生,B由A(公共)派生。 因此,我认为D可以访问A类成员,因为B类:公共A {public:int x} ==> B级 {public:int w; int x;}
和D类:受保护的B {public:int z} ==> D级 {public:int z;保护:int w,int x;}
为什么我错了?谢谢!
答案 0 :(得分:3)
D
可以看到A
和B
的成员,但是由于protected
的继承,只有D
和派生自D
的类知道D
是B
,并且可以访问B
和A
成员。 main
不是从D
派生的,因此main
不知道D
对B
的继承,因此无法访问继承的A
和B
个成员。