【问题标题】:Access protected member through friend通过朋友访问受保护的成员
【发布时间】:2016-04-07 16:53:37
【问题描述】:

假设B类继承A类,B类friends C。A类有一个受保护成员foo

C类可以访问foo吗? C++ 标准版本之间有什么区别吗?

例子:

class A {
protected:
    void foo() {}
};

class B : public A {
    friend class C;
};

class C {
    void func() {
        B b;
        b.foo();
    }
};

【问题讨论】:

  • 您能否提供一个代码示例来满足您的实际要求? class Cclass Aclass B 到底有什么关系? ACfriend 类实际上不会通过 class Bclass A 的访问权限来更改 class C 的任何内容。
  • 应该自己尝试过,但我编辑了您的问题以包含您描述的代码,并回答了它。
  • @David 我更希望 OP 自己澄清这一点,而不是你把不清楚的问题用形状来匹配你的答案(我很想回滚你的编辑)。
  • @πάνταῥεῖ 抱歉,我打算在以后的编辑中自己提供一个代码示例。我想没有时间:-)
  • @πάνταῥεῖ 他描述的代码相当清楚,如果我不确定他在问什么,我不会费心澄清它。

标签: c++


【解决方案1】:

是的,C 可以访问 B::foo。朋友可以访问您可以访问的任何内容。因为B可以访问foo,所以C可以访问B::foo。但是,friends 无法访问朋友的朋友。

不,据我所知,编译器在这个问题上没有区别。

【讨论】:

  • 很好的答案(和编辑)。我没想过要问“朋友的朋友”。我会在标记这个答案之前等待一段时间,以防某些 c++ 大师在接下来的几天里提供标准的参考和引用。 “你知道的”和我一样是一个猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 2021-01-09
  • 2014-02-20
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多