加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:22:52 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: #include iostreamclass 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();} 根据this answer,成员变量A :: a在所有类
请考虑以下代码:

#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();
}

根据this answer,成员变量A :: a在所有类中都“存在”,但其可见性不同,即在B或C中不可见,除非我们将B或C作为A的朋友.我的问题是我为什么需要让C成为A和B的朋友?我会尽管A中的朋友声明就足够了.如果我删除朋友类C;来自A或B的声明,代码无法编译.

解决方法

My question is why do I need to make C a friend of both A and B?

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

确实:

> C继承B,因此可以从C访问B中的所有公共内容.>但B从A私下继承.C是B的朋友,让C看到这个继承.> A :: a的访问是私有的,所以即使C将A视为其祖先,它也需要成为A的朋友才能看到A :: a.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读