0

定義されていないstaticが、定義する必要があるメンバー変数がクラスに存在することはありますか (メモリを予約するために静的変数が定義されているため)。もしそうなら、例を挙げてもらえますか?そうでない場合、静的メンバーだけが定義可能なメンバーであるのはなぜですか?

BJARNE は、メンバーをオブジェクトとして使用する場合は、それを定義する必要があると述べました。

しかし、メンバー変数を明示的に定義すると、プログラムでエラーが表示されます。

class test{
    int i;
    int j;
  //...
};

int test::i; // error: i is not static member.
4

3 に答える 3

0

あなたの例では、宣言ij、クラスでそれらも定義します。

この例を参照してください。

#include <iostream>

class Foo
{
public:
    int a;         // Declares and defines a member variable
    static int b;  // Declare (only) a static member variable
};

int Foo::b;    // Define the static member variable

これで、次のようなaタイプのオブジェクトを宣言することでアクセスできます。Foo

Foo my_foo;
my_foo.a = 10;
std::cout << "a = " << my_foo.a << '\n';

b:の場合は少し異なります。:staticのすべてのインスタンスで同じであるためです。Foo

Foo my_first_foo;
Foo my_second_foo;

Foo::b = 10;
std::cout << "First b = " << my_first_foo.b << '\n';
std::cout << "Second b = " << my_second_foo.b << '\n';
std::cout << "Foo::b = " << Foo::b << '\n';

上記の場合、すべてbが10であると印刷されます。

于 2012-01-26T06:48:25.453 に答える
0

その場合、 のコンストラクターの初期化リストを使用して、次のようにインスタンスtestの初期値を定義します。

class test {
    int i;
    int j;
  //...
public:
  test() : i(-12), j(4) {}
};
于 2012-01-26T05:45:01.770 に答える
0

この定義では、1 つの整数用にスペースが予約されていますが、実際には、作成するクラスのインスタンスごとに個別の整数が存在します。あなたのプログラムがその数のtest.

非静的メンバーのスペースは、クラスのインスタンスが作成されるたびに実行時に割り当てられます。クラスのコンストラクターによって初期化されます。たとえばtest::i、各インスタンスで整数を 42 に初期化する場合は、次のようにコンストラクタを記述します。

test::test(): i(42) {
}

そうすれば

test foo;
test bar;

それぞれが値 42 の整数を含む2 つのオブジェクトを取得します (もちろん、値はその後変更される可能性があります)。

于 2012-01-26T05:45:45.023 に答える