假设我有以下代码:
class A
{
public:
void foo() const {}
};
class B : protected A
{
public:
void print() const
{
foo();
}
};
void main()
{
B b;
b.print();
b.foo();
}
现在,通过阅读Difference between private, public, and protected inheritance,我得出的结论是,在保护继承的情况下,派生类(B类)可以访问基类的每个公共成员(就此而言,类A)。
>但是,我不明白为什么在这种情况下不允许使用b.foo();
命令,因为显然根据保护继承的规则,似乎允许使用该命令。
答案 0 :(得分:0)
您正在尝试从main()的范围访问B :: foo()。由于foo在这种情况下不是公共的,因此不允许。
答案 1 :(得分:-1)
在这种情况下,只有class B
“知道”或“知道” class A
与自身之间的固有关系,因为该关系为protected
。也就是说,main()
不知道上述关系。