为什么这里的第一个语句不违反受保护的访问,而第二个语句呢?

Pal*_*han 2 c++ protected

我正在研究这段代码:

#include <iostream>

class A
{
public:
    A() {};

    void fox(A& otherA) { otherA.hello(); }

protected:
    void hello() {std::cout << "hello" << std::endl;}
};

A a1,a2;

int main(void)
{
    a1.fox(a2);
    a1.hello();
}
Run Code Online (Sandbox Code Playgroud)

并且我有点困惑,如何说,a1.fox(a2)将说,a1.hello()而不会说.我本以为它会破坏因为我可以在类中调用protected和private函数...允许我在otherA对象上执行此操作意味着我必须知道我是从它自己的成员中调用它类.为什么/如何运作?

das*_*ght 6

受保护的不是逐个实例的访问控制,它是一个逐类的访问控制.

main()(不属于任何类)不能调用任何类的私有或受保护的方法; 因此无法打电话a1.hello().

的实施A::fox(A&),在另一方面,是班级里面A,所以它可以调用它的私有和保护方法,既对自身和对类的其他实例.