gpt4 book ai didi

c++ - 引用和友元类的意外行为

转载 作者:行者123 更新时间:2023-11-28 01:26:23 27 4
gpt4 key购买 nike

我在使用 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 shouldn't be able to modify the variable _a

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

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

关于c++ - 引用和友元类的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53591651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com