【问题标题】:Why don't derived classes have access to base class static methods?为什么派生类不能访问基类静态方法?
【发布时间】:2014-04-07 22:45:15
【问题描述】:

为什么the following code 不起作用?

class A
{
   static void Method() { std::cout << "method called."; }
};

class B : public A
{
   // Has a bunch of stuff but not "Method"
};

int main()
{
   B::Method();
}

我知道我可以通过将以下内容添加到 B 来使其工作,但如果这不是必需的,那就太好了,特别是如果有几个派生自 A 的类。

   static void Method() { A::Method(); }

【问题讨论】:

  • @jthill 你是对的。如果它是公开的,它工作得很好。谢谢。

标签: c++ inheritance static-methods


【解决方案1】:

使用class 键声明的类成员默认是私有的。要将它们公开,您必须说:

class A
{
    public:
//  ^^^^^^^
        static void Method() { cout << "method called."; }
};

【讨论】:

  • 我的问题已被编辑。即使明确公开,我仍然无法访问此方法。
  • 你的意思是在main而不是derived::Method中调用B::Method
  • @SteveJessop 你是对的。我的错。错误已得到修复。
  • @KerrekSB 我撒谎了。我把它公开了,然后它就起作用了。
  • 您最好将其设为“受保护”而不是“公开”。
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多