根据http://en.cppreference.com/w/cpp/language/access,
受保护的成员可以在类及其方法及其后代中访问
他们只是指直接后代,而不是后代的后代,还是指所有后代?
e.g。如果C类是B的子类,而B是A的子类,它有一个受保护的成员,那么B显然可以访问它,但是C呢?
答案 0 :(得分:6)
受保护的成员可用于所有后代,直到/除非您达到使用私有继承的点。因此,只要您的A,B和C都使用公共继承(或受保护的继承,尽管这种情况很少被忽略),那么是的,最派生的仍然可以使用来自最基类的受保护成员(和如果有D,E和F,则仍然如此。
答案 1 :(得分:3)
所有后代。
另外,你应该自己尝试一下,在某个地方制作一个main.cpp并尝试一下。这就是你将学到的最多。
(当然,我假设你一直在使用公共派生,因为你没有另外指明)
祝你好运答案 2 :(得分:1)
他们只是指直系后代吗?
不 - 后代的后代,后代的后代的后代等等也符合资格。他们都可以访问所有基类的受保护成员,一直到继承链。
class A {
protected:
int val;
public:
A(int x) : val(x) {}
};
struct B : public A {
B(int x) : A(x) {}
};
struct C : public B {
C(int x) : B(x) {}
void show() {
cout << val << endl;
}
};
int main() {
C c(123);
c.show();
return 0;
}
答案 3 :(得分:1)
受保护的方法在第一个后代中是受保护的或私有的(取决于下载的继承方式)。从那里开始,他们的状态被确定为根据继承规则他们是该类的成员。
示例:
class A{
protected: int var;
}
class B : private A{
}
class C : protected A{
}
class D : public A{
}
在C
和D
变量中var
受到保护,B
中的变量属于私有,并且不能被其他后代看到。