请考虑以下代码:
#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();
}
Run Code Online (Sandbox Code Playgroud)
根据这个答案,成员变量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.