【问题标题】:Calling a protected method for a member object in C++在 C++ 中为成员对象调用受保护的方法
【发布时间】:2013-09-29 17:01:10
【问题描述】:

如果我有两个类,例如这样

class A {
    ...
    protected:
        B* test;
        aFunction();
};

class B {
    ...
    protected:
        A* test1;

    public:
        bFunction();
};

我可以在 B 类的 bFunction() 内执行此操作吗:

bFunction(){
    test1->aFunction();
}

基本上,我可以从不是从该函数派生的类中调用某个类的受保护函数吗?

【问题讨论】:

  • 你为什么不试试看呢?
  • 只有一个答案:没有。

标签: c++ protected


【解决方案1】:

protected 的“要点”是只有从基类派生的类才能调用这些函数。

如果您有充分的理由这样做,则将课程设为friend,例如在class A 中添加friend class B;

【讨论】:

    【解决方案2】:

    建议避免这种不明显的相互依赖。必须使用友元函数通常表明架构不好。

    【讨论】:

      【解决方案3】:

      来自cplusplus.com

      类的私有成员和受保护成员不能从 在声明它们的同一类之外。然而,这个规则 不影响朋友。

      当它们是“朋友”时,您可以从其他类调用 protected 和 privat 方法:

      你的情况是:

      Class A {
          ...
          protected:
              B* test;
              aFunction();
          friend class B;
      }
      

      这通常被认为是不好的做法,但对于紧密耦合的类来说是可以的。

      【讨论】:

        猜你喜欢
        • 2016-06-12
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 2010-10-30
        相关资源
        最近更新 更多