3

重複の可能性:
static intaとintaの違いは何ですか?

簡単な英語で簡単な説明をしようとしています。私はとの違いを読んで研究しようとしましたstatic intint、私が読んだものは何でも私をもっと混乱させるようです。以下のようなクラスがあるとしましょう

class B{
  static int i;
  int i;
  ...
}

簡単な英語では、2つの違いは何ですか?プログラマー以外の人に説明していると想像してみてください。誰かがここでこのような同様の質問をしましたが、それは私の満足ではありません。

4

4 に答える 4

6

これがあなたのための比喩です。

銀行口座を持っている組織を想像してみてください。その組織は、C ++の観点から、あなたclassです。組織に代表者(必要に応じて労働者)がいると想像してください。これらは、C ++の観点から、そのクラスのインスタンス(または変数)です。

これで、各代表者は自分だけが利用できる自分の銀行口座を持つことができます。他の人はそれを使用できません。それは正常intです。

ただし、各従業員は、全員が共有し、特にどの従業員にも属していない組織の銀行口座を使用することもできます。それはあなたstatic intです。


ここで、必要に応じて、再び専門用語に戻ります。明確かつ簡潔にしようと思います。

  • 通常int

    クラスタイプの各変数には、独自の個人変数があります。したがって、あなたの例では、タイプの変数を10個作成するBと、それらのすべてに独自の int i変数が含まれます。

  • static int

    静的変数は、クラスのすべての変数によって共有されます。静的変数はどのクラス変数にも属しておらず、クラス自体に属しています。したがって、タイプの変数を10個作成するとB、それぞれがにアクセスできますがstatic int i、所有する変数はありません(共有されます)。

于 2012-11-23T06:29:58.013 に答える
3

クラス内の静的とは、オブジェクトのすべてのインスタンスB a,b,c,d;がまったく同じメンバーiを持つことを意味します。a.i++; などの内容を変更しますb.ic.i

クラス内とクラス外の静的の違いは、静的変数をクラス内またはクラスを通してのみ表示できるようにすることです。もちろん、変数はクラスではなく別の場所に格納されます。この構文では、この特定のクラスに対する変数のスコープを定義できます。

そしてもちろん、非静的メンバーは各インスタンスに固有です。

于 2012-11-23T06:31:52.097 に答える
1

Bの複数のオブジェクトを宣言すると、すべてのオブジェクトに独自のintiのコピーが作成されます。ただし、すべてのオブジェクトに対して静的な整数は1つだけです。

B::i //This will refer to the static i
//As you can see this is accessed through the class name

B obj, obj2;
obj.i //This will refer to the obj member i 
obj2.i // and will be different from this which is obj2 member i
于 2012-11-23T06:31:13.287 に答える
1

重複する名前の混乱を避けるために、次のことを想像してください。

class foo
{
    public:
       int i;
       static int j;
};

static int j;jクラスに関連付けられていると呼ばれる単一の変数を定義しますfoofoo作成するタイプのオブジェクトがいくつあっても、オブジェクトは1つだけになりますj。この場合、構文を使用して、クラス外のすべてにfooアクセスできます。jfoo::j

iこれを、タイプのオブジェクトのメンバーであるの定義と比較してくださいfooiタイプのすべてのオブジェクトに対して作成された一意のものがありますfoo。例えば。

foo myObject;
foo myOtherObject;

myObject.i = 42; myOtherObject.i = 180;

于 2012-11-23T06:38:29.837 に答える