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

私のクラスには、クラス間または他のクラスと相互作用するさまざまなオブジェクトがありません。
もちろん、このクラスの関数を呼び出すには少なくとも1つのオブジェクトがstatic必要なので、不要なオブジェクトの作成を回避できるようにメンバーを作成することを考えました。

このデザインの長所と短所は何ですか?より良いデザインは何でしょうか?

4

3 に答える 3

2

静的メンバーにアクセスするには、オブジェクトも必要ありません。

AA::a1()

このパターンは「モノステート」と呼ばれ、代替手段はシングルトンです。ここでは実際にオブジェクトを作成しますが、一度だけ実行するようにしてください。その方法については、グーグルで検索するだけです。

于 2012-12-06T09:01:27.633 に答える
1

static複数のオブジェクトを作成する必要がない場合、クラスのメンバーを変更する必要がありますか?

staticクラスのすべてのオブジェクトに対してメンバーのインスタンスが1つだけ必要な場合は、クラスのメンバーを作成します。クラスメンバーを宣言するstaticと、メンバーはオブジェクトごとではなくクラスごとになります。

クラスのオブジェクトが1つだけ必要であると言うときは、おそらくシングルトンデザインパターンを指しています。パターンはアンチパターンと広く見なされており、特定の状況に依存する場合はその有用性があることに注意してください。

Qでおっしゃる理由は、会員になるかどうかとは関係ありstaticません。

于 2012-12-06T08:58:50.190 に答える
1

あなたのクラスにはデータメンバーがいないので、クラスを使用する正当な理由はまったくありません。

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

もちろん、このクラスの関数を呼び出すには、少なくとも1つのオブジェクトが必要です。

それは真実ではない。クラスのインスタンスなしで静的メンバー関数を呼び出すことができます。

シングルトンパターンに関する注意:評判が悪く、誤用されることが多く、私の経験では、それが役立つことはめったにありません。クラスのインスタンスは1つだけであり、このインスタンスはグローバルにアクセス可能であることを強制します。

特に、シングルトンが最初に導入された大文字のデザインパターンである場合は、「インスタンスが1つだけ必要なので、シングルトンを使用する必要がある」とよく考えられます。これは間違っています。インスタンスが1つだけ必要な場合は、インスタンスを1つ作成して使用してください。クラスの将来のすべてのユーザーを、1つのインスタンスのみを作成するように不必要に制限しないでください。共有グローバル状態を不必要に作成しないでください。どちらの場合も、コードの柔軟性が低下し、さまざまな方法で使用するのが難しくなり、特にテストが難しくなります。これらの理由から、シングルトンは厳密には決して役に立たないと主張する人もいます。

この場合、インスタンスは1つも必要ないようです。その場合は、上記のように無料の関数を使用します。

于 2012-12-06T10:39:25.607 に答える