静态方法可以访问同一类的私有方法吗?

新手上路,请多包涵

由于单例/命名构造函数,我有这个问题。在这两种情况下,真正的构造函数都是受保护的或私有的,两者都不能从外部访问。

例如,一个简短的命名构造函数是这样的:

  class A
{
  public:
    static A createA() { return A(0); } // named constructor
  private:
    A (int x);
};
int main(void)
{
   A a = A::createA();
}

我认为静态方法只能访问静态数据成员,或者通过现有对象访问私有数据/方法。但是,在上面的代码中,私有构造函数 A() 不是静态的,并且在调用它时,也不存在任何对象。所以我能想到的唯一解释就是静态方法可以访问同一个类的非静态私有方法。任何人都可以肯定或否定我的想法,可能有一些解释吗?

如果这太微不足道了,我深表歉意,但是关键词太常见了,我无法在数十个谷歌页面中找到答案。提前致谢。

原文由 Flowing Cloud 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 490
1 个回答

对此进行跟进,为什么不允许这样做?如果允许创建对象,为什么不允许创建指向它的指针?

 using namespace std;
class A
{
  public:
    static std::unique_ptr<A> createA() {
    return std::make_unique<A>(0);
    }
  private:
    A (int x) { y = x;}
    int y;
};
int main(void)
{
   auto a = A::createA();
   return 0;
}

原文由 Manish 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题