-1

静的キーワードをよく読みましたが、静的変数、静的関数しか見つかりませんでしたが、静的クラスの議論はありません。これについて説明してください。

  • なぜc++で静的クラスを使用するのですか?
  • なぜこのタイプのクラスを導入するのですか?
  • 静的クラスの物理的重要性を教えてください。
  • 静的クラスの実際の例を挙げてください。
  • 制限がある場合は、何を教えてください。

あなたの返信を待っている。前もって感謝します。

4

1 に答える 1

7

C++ には静的クラスはありません。staticつまり、データ型ではなく、オブジェクトまたは関数に適用されます。

Java ではstatic class、 が他のクラスにネストされたクラスに適用される場合、ネストされたクラスは、囲んでいるクラスのインスタンスとは無関係にインスタンス化できることを意味します。C++ では常にそうです。C++ のネストされたクラスは、常に独立したデータ型です。

これが私が言いたいことです: まず、この Java コードを見てみましょう:

public class A {
  public class B {
  }

  public static void main(String[] args)
  {
    A.B b1 = new A.B();  // <-- This is ill-formed, because A.B is not
                         //     an independent data type

    A a = new A();
    A.B b2 = a.new B();  // <-- This is correct. Use an instance of A to
                         //     create an object of type A.B.
  }
}

これは、クラスAと、ネストされたクラス (つまり、メンバー クラスまたはサブクラス) を定義しA.Bます。メイン プログラムの 2 行目は、 type のオブジェクトをインスタンス化できないことを示していますA.BBのメンバ クラスであるため、これを行うことはできません。そのため、型の既存のオブジェクトをインスタンス化するA必要があります。メイン プログラムの 3 行目は、これがどのように行われるかを示しています。A

type のオブジェクトを( type のインスタンスとは独立して)A.B 直接インスタンス化できるようにするには、次の静的メンバ クラスを作成するA必要があります。BA

public class A {
  public static class B {   // <---- I inserted 'static'
  }

  public static void main(String[] args)
  {
    A.B b1 = new A.B();  // <-- This is now well-formed

    A a = new A();
    A.B b2 = a.new B();  // <-- This is now ill-formed.
  }
}

一方、C++ では、これは必須ではありません。C++ では、メンバー クラスは常に独立したデータ型であるためです (ネストされたクラスのインスタンスを作成できるようにするために、外側のクラスのインスタンスは必要ないという意味で)。

class A
{
public:
  class B
  {
  };
};

int main()
{
  A::B b;   // <--- Perfectly well-formed instantiation of A::B
  return 0;
}
于 2012-09-15T10:19:11.130 に答える