我知道这样做很可能毫无意义,但我对结果的原因很感兴趣。
为什么这个代码:
#include <iostream>
class A
{
protected:
A()
{
}
};
class B : public A
{
public:
void f()
{
A a;
}
};
int main()
{
return 0;
}
给出错误消息:
test.cpp:18:5: error: ‘A::A()’ is protected within this context
18 | A a;
| ^
test.cpp:7:2: note: declared protected here
7 | A()
| ^
毕竟,B 类可以使用 A 类的 Protected 成员。
这是因为
A a;
- 另一个对象。只能在一个对象内访问父类的字段。那些。在这种情况下,上下文是不同的。试试代码:
编译错误:
同时,也
this->b
被接受。