0
class AA
{
    public:
        AA ();
        static void a1          ();
        static std :: string b1 ();
        static std :: string c1 (unsigned short x);
};

我的班级不会有不同的对象在他们之间或与其他人之间进行交互。
当然我需要至少有一个对象来调用这个类的函数,所以我想到了制作成员static以避免不必要的对象创建。

这种设计的优缺点是什么?什么是更好的设计?

4

3 回答 3

2

要访问静态成员,您甚至不需要对象,只需调用

AA::a1()

这种模式被称为“Monostate”,替代方案是 Singleton,您可以在其中实际创建一个对象,但要确保它只完成一次,有大量关于如何做到这一点的教程,只需 google 一下。

于 2012-12-06T09:01:27.633 回答
1

static当不需要创建多个对象时,是否应该转换类的成员?

当您的类static的所有对象只需要一个成员实例时,您就可以创建该类的成员。当您声明一个类成员static时,该成员变为每个类而不是每个对象。

当您说您只需要类的一个对象时,您可能指的是单例设计模式。请注意,模式被广泛认为是一种反模式,如果有的话,它的有用性取决于特定情况。

你在Q中提到的原因与你是否应该成为会员static没有任何关系。

于 2012-12-06T08:58:50.190 回答
1

你的类没有数据成员,所以我看不出有什么好的理由使用一个类:

namespace AA
{
    void a1          ();
    std :: string b1 ();
    std :: string c1 (unsigned short x);
};

当然我需要至少有一个对象才能调用这个类的函数

这不是真的。您可以在没有类实例的情况下调用静态成员函数。

关于 Singleton 模式的说明:它名声不好,经常被误用,而且根据我的经验,它很少有用。它的作用是强制该类只能有一个实例,并且该实例是全局可访问的。

人们经常认为,“我只需要一个实例,因此我应该使用 Singleton”,尤其是当 Singleton 是他们被引入的第一个大写设计模式时。这是错误的——如果您只需要一个实例,请创建一个实例并使用它。不要不必要地限制该类的所有未来用户只创建一个实例。不要不必要地创建共享的全局状态。这两件事都会使您的代码不那么灵活,更难以不同的方式使用,因此特别难以测试。有些人会争辩说,由于这些原因,Singleton 严格来说从来没有用处。

在这种情况下,您似乎甚至不需要一个实例。如果是这种情况,我会使用上述免费功能。

于 2012-12-06T10:39:25.607 回答