沿类层次结构的私有继承,为什么整个层次结构都需要朋友

虚拟软件公司

考虑以下代码:

#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在所有类中都是“存在”的,但其可见性有所不同,即在中BC除非我们成为BC的朋友,否则它是不可见A我的问题是,为什么我需要C的朋友 AB我本来的朋友声明A就足够了。如果我friend class C;A或中删除了声明B,则代码将无法编译。

YSC

我的问题是,为什么我需要使C的朋友A和B?

如果没有B声明C有一个朋友,C就不会看到 B的继承A即使C看到 A::a,也不会看到 B::a

确实:

  • C继承B,因此可以从中访问任何公开B内容C
  • B继承私下AC作为朋友B品牌C 看到这种继承。
  • 的访问A::a是私人的,所以即使C 看到 A它的祖先,它需要的朋友A看看 A::a

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章