考虑以下代码:
#include <iostream>
class A{
friend class C;
int a{42};
};
class B: private A{
friend class C;
};
class C: private B {
public:
void print() {std::cout << a << '\n';}
};
int main() {
C c;
c.print();
}
根据此答案,成员变量A::a
在所有类中都是“存在”的,但其可见性有所不同,即在中B
,C
除非我们成为B
或C
的朋友,否则它是不可见的A
。我的问题是,为什么我需要C
的朋友都 A
和B
?我本来的朋友声明A
就足够了。如果我friend class C;
从A
或中删除了声明B
,则代码将无法编译。
我的问题是,为什么我需要使C的朋友都A和B?
如果没有B
声明C
有一个朋友,C
就不会看到 B
的继承A
。即使C
会看到 A::a
,也不会看到 B::a
。
确实:
C
继承B
,因此可以从中访问任何公开的B
内容C
。B
继承私下的A
。C
作为朋友B
品牌C
看到这种继承。A::a
是私人的,所以即使C
看到 A
它的祖先,它需要的朋友A
来看看 A::a
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句