gpt4 book ai didi

c++ - 为什么只有在使用公共(public)继承时派生类的友元函数为 "available"?

转载 作者:行者123 更新时间:2023-12-03 17:22:08 26 4
gpt4 key购买 nike

当派生类通过公共(public)访问从基类继承时,问题与Are friend functions inherited? and why would a base class FRIEND function work on a derived class object? 中的问题相同。 .但是,如果它通过 protected 或私有(private)访问继承,则会出现可见性错误。

当它通过公共(public)访问继承时,A 的私有(private)成员的可访问性与通过私有(private)访问继承相同。他们之间有什么区别?

class A {
private:
int a;
friend void f();
};

class B : private A {
};

void f() {
B obj;
int x = obj.a;
}

int main() {
f();
return 0;
}

最佳答案

正如上面链接的答案中已经指出的那样,友元不是遗传的。因此,A 的 friend 也不是 B 的 friend .有B继承自 A通过 private访问意味着 A 的所有成员可作为 B 的私有(private)成员访问[class.access.base]/1 .由于f不是 B 的 friend ,它不能访问 B 的私有(private)成员[class.access]/1.1 .由于f不是 B 的 friend , 基类 AB也无法从 f 访问[class.access.base]/4 .由于基类AB无法从 f 访问,您也无法访问 A B 的子对象(您可以访问其中的成员)在 f [class.access.base]/5

关于c++ - 为什么只有在使用公共(public)继承时派生类的友元函数为 "available"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59544618/

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