2

私は、常に同じ値になりたい3つのメンバー変数を持つクラスを構築しています。

私は持っています

class foo{

public:
    double var_1, var_2, var_3;
    double x=1, y=2, z=3;

[functions go here]

};

そのような変数を初期化できないため、エラーが発生しました。しかし、x、y、zを常にそれぞれ1、2、3にしたいです。クラスの外でそれらを定義しようとしましたが、クラスのメンバー変数にしたいので、それは機能しません。

どうすればよいですか?

4

3 に答える 3

4

これらの値をクラスに対して静的にします。これにより、すべてのオブジェクトがこれらの同じ値を継承します。

static const int x = 1;
static const int y = 2;
static const int z = 3;

技術的には、これは変数を定義しません。静的データメンバーがconstintegralまたはconst列挙型の場合、静的データメンバーの宣言で定数初期化子を指定できます。この定数初期化子は、整数定数式である必要があります。定数初期化子は定義ではないことに注意してください。それでも、囲んでいる名前空間で静的メンバーを定義する必要があります。

#include "foo.h"
#include <//libs....>
int foo::x;
int foo::y;
int foo::z;
//class functions down below
于 2012-11-17T22:46:00.570 に答える
3

他のメンバーと同様に、コンストラクターで初期化子リストを使用して、これらのフィールドの初期値を設定することもできます。

class foo {
public:
    const double x;
    const double y;
    const double z;

    foo() : x(1), y(2), z(3) {
    }
};
于 2012-11-17T22:49:33.213 に答える
1

それらを静的にする必要はありません次のように宣言できます。

class foo{

public:
    double var_1, var_2, var_3;
    const double x=1.0;
    const double y=2.0;
    const double z=3.0;

[functions go here]

};

ただし、それらが整数値である場合は、intsとして宣言する方が適切です。

于 2012-11-17T22:50:10.077 に答える