根据http://en.cppreference.com/w/cpp/language/access,
受保护的成员可在类及其方法及其后代中访问
它们是指直系后代,而不是后代的后代,还是指所有后代?
例如,如果类 C 是 B 的子类,而 B 是具有受保护成员的 A 的子类,那么 B 显然可以访问它,但是 C 呢?
根据http://en.cppreference.com/w/cpp/language/access,
受保护的成员可在类及其方法及其后代中访问
它们是指直系后代,而不是后代的后代,还是指所有后代?
例如,如果类 C 是 B 的子类,而 B 是具有受保护成员的 A 的子类,那么 B 显然可以访问它,但是 C 呢?
受保护的成员对所有后代都可用,直到/除非您达到使用私有继承的地步。因此,只要您的 A、B 和 C 都使用公共继承(或受保护的继承,尽管这种情况很少到几乎可以忽略),那么是的,最派生的仍然可以使用来自最基类的受保护成员(并且如果有 D、E 和 F,同样如此)。
所有的后代。
另外,有时您应该自己尝试一下,在某个地方创建一个 main.cpp 并尝试一下。这样你学得最多。
(当然,我在这里假设您一直使用公共派生,因为您没有另外指定)
祝你好运
他们只指直系后代吗?
否 - 后代的后代,后代的后代,等等,也符合条件。他们都可以访问所有基类的受保护成员,一直到继承链。
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;
}
以上编译并打印123
。
受保护的方法在第一个后代中是受保护的或私有的(取决于后代的继承方式)。从那里开始,他们的状态被确定为根据继承规则他们是该类的成员。
例子:
class A{
protected: int var;
}
class B : private A{
}
class C : protected A{
}
class D : public A{
}
InC
和D
变量var
是受保护的,在B
其私有中,不能被进一步的后代看到。