【问题标题】:A class which does not need an instance不需要实例的类
【发布时间】:2014-03-13 12:14:24
【问题描述】:

是否可以创建一个不需要实例化的类?换句话说,是否可以在没有它的实例的情况下使用该类的函数?

【问题讨论】:

    标签: c++ class instance


    【解决方案1】:

    您可以使用静态函数,它们绑定到类,而不是实例。

    class Test{
        static void 
        doSomething()
        {
            std::cout << "something" << std::endl;
        }
    }
    
    int
    main(int argc, char** argv)
    {
        Test::doSomething(); //prints "something" without instance of Test
    }
    

    否则你可以构建一个单例,在这种情况下,类本身将保存实例,但我不确定这是否是你想知道的......

    【讨论】:

    • 使用静态函数正是我想要的。谢谢。
    • 虽然请记住这很少有用,因为您也可以在任何类之外定义一个名为 doSomething 的函数。您甚至可以将其放在名为 Test 的命名空间中。不过,它通常对模板很有用,因为类可以是模板参数,但命名空间不能。因此,您可以将函数组合到类中,然后告诉模板使用该类。
    • @Steve-Jessop 老实说,除了单例模式之外,我从不使用静态函数来获取实例。在面向对象编程中,这不是我认为的最佳实践,但他要求这样做,所以我回答 ;)
    • @Theolodis:哦,是的,我的谨慎并不意味着答案有任何错误:-)
    【解决方案2】:

    您可以将所有成员函数和变量设为静态,但随后人们开始怀疑为什么它应该是一个类,而不是命名空间。

    但有一个很好的理由:您可能想要使用这样的类模板。 C++14 将添加变量模板,这使得在没有类的情况下也能做到这一点。一个类也允许访问控制;您可以使用匿名命名空间为非模板案例伪造这个,但类可能更自然。

    【讨论】:

      【解决方案3】:

      可以在不创建类实例的情况下调用静态方法。

      class CMyClass
      {
          public:
          static void Method1()
          {
              printf("Method1\n");
          }
      };
      
      CMyClass::Method1();    // Prints "Method1".
      

      【讨论】:

        【解决方案4】:

        是的,这是可能的。如果你想在没有实例的情况下使用类,你必须使用静态函数。

        【讨论】:

          【解决方案5】:

          您也可以使用静态方法创建此类的私有构造函数,以防止创建任何实例

          【讨论】:

            【解决方案6】:

            为此,您应该使用static 修饰符。请参阅此处的文档:http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx

            【讨论】:

            • 后来看到了,只是换了个链接。 :)
            • 没错,我说的是static修饰符。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-07-29
            • 1970-01-01
            • 2018-10-13
            • 1970-01-01
            • 2013-08-15
            • 2017-11-05
            • 1970-01-01
            相关资源
            最近更新 更多