使用friend关键字和引用时,我有意外的行为。这是代码:

#include <iostream>

class Modifier;

class A{
 private:
     int _a;
     friend Modifier;
};
class B : public A {};

class Modifier
{
public:
    void f(A& i) { i._a = 10; std::cout << i._a << std::endl; }
};
int main()
{
    Modifier m;
    B b;
    m.f(b);
}
// Output
// 10


B不能修改变量_a。有人可以向我解释这怎么可能吗?

最佳答案

B不能修改变量_a


_a及其包含的对象是非常量的,因此可以修改_a。将成员声明为私有并不会阻止变量被修改。访问说明符仅影响可访问变量名称的范围。

B不会修改变量_a。是Modifier::f修改_a变量(它是变量Ab基本子对象的成员)。 ModifierA类的朋友,因此Modifier的成员函数可以访问A的私有声明名称。具有访问权限意味着它可以使用名称A::_a

10-06 01:43