rand()
コンストラクターでa を使用する C++ クラスに取り組んでいます。このクラスがほぼすべての方法で自分自身を処理することを本当に望んでいますが、シードする場所がわかりませんrand()
。
コンストラクターをシードrand()
すると、オブジェクト タイプの新しいインスタンスが構築されるたびにシードされます。したがって、3 つのオブジェクトを順番に作成すると、それらはすべて同じ秒で作成されるためrand()
、 のシードが同じになり、オブジェクトの 3 つのインスタンスのそれぞれについてまったく同じデータが生成されます。
rand()
オブジェクトを作成する前にプログラムのメイン関数でシードするのではなく、クラス コード内でシードしたいと考えています。static bool seeded;
まだシードされているかどうかを示す変数を作成することを考えrand()
ましたが、クラスの作成時に false に初期化する方法がよくわかりません。
私の考えは次のようになります
myConstructor(){
if(!seeded){
srand(time(NULL));
seeded = true;
}
myVariable = rand()%maxVal;
}
プログラムの開始時に静的な値を一度だけ false に初期化する方法を理解できれば、これはうまくいくと思います。この static 値を true に変更すると、オブジェクトが静的である場合、オブジェクトのすべてのインスタンスが引き継がれるため、そのオブジェクト タイプが最初に作成されたときにのみシード関数が実行されることを理解しています。