我不能理解这个访问修饰符 我是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 }

我不能理解这个访问修饰符 我是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 },c++,access-modifiers,C++,Access Modifiers,我认为(D;D.w=10)是正确的,但它有编译错误 D由B派生(受保护),B由A派生(公共)。 我认为D可以访问一个类成员,因为 B类:公共A {public:int x} ==> B类 {public:intw;intx;} D类:受保护的B类 {public:int z} ==> D类 {public:intz;protected:intw,intx;} 为什么我错了??谢谢大家! D可以看到A和B的成员,但是由于受保护的继承,只有D和从D派生的类知道D是AB并且可以访问B和A成员main不

我认为(D;D.w=10)是正确的,但它有编译错误

D由B派生(受保护),B由A派生(公共)。 我认为D可以访问一个类成员,因为

B类:公共A {public:int x} ==> B类 {public:intw;intx;}

D类:受保护的B类 {public:int z} ==> D类 {public:intz;protected:intw,intx;}


为什么我错了??谢谢大家!

D
可以看到
A
B
的成员,但是由于
受保护的继承,只有
D
和从
D
派生的类知道
D
是A
B
并且可以访问
B
A
成员
main
不是从
D
派生的,因此
main
不知道
D
B
的继承,因此无法访问继承的
A
B
成员。

因为
受保护的
继承,只有
D
和从
D
派生的类知道
D
B
并且可以访问
B
a
成员
main
不是从
D
派生出来的“因此,我认为D可以访问类成员”您是正确的,但是试图访问
A::w
的是
main
,而不是
D
的成员函数。