У меня есть класс dieClass
для представления шестистороннего d ie, и я использую <random>
для установки числа. Вот заголовочный файл die.h
:
#include <random>
#include <iostream>
class dieClass
{
public:
dieClass();
int getNum() const { return num; }
private:
int num;
static std::uniform_int_distribution<int> distribution;
};
, а вот файл реализации die.cpp
:
#include "die.h"
dieClass::dieClass()
{
static std::random_device rdevice{};
static std::default_random_engine generator{rdevice()};
num = distribution(generator);
}
std::uniform_int_distribution<int> dieClass::distribution{1, 6};
Вопрос: Если я позвоню dieClass dice[5]
, я создал пять default_random_engines
, или только один, потому что это stati c? В принципе, какой самый эффективный способ построить миллионов игральных костей? Могу ли я объявить generator
вне конструктора, как я сделал для distribution
? Я не до конца понимаю, что делают частные лица и * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. Я вытащил весь код, генерирующий случайные числа, из класса и вставил его в файл реализации. Теперь я могу вызвать generator
из функции roll
.
dieClass.h
#include <iostream>
class dieClass
{
public:
die();
void roll();
int getNum() const { return num; }
private:
int num;
};
dieClass.cpp
#include <random>
#include "die.hpp"
std::random_device rdevice{};
std::default_random_engine generator{rdevice()};
std::uniform_int_distribution<int> distribution{1, 6};
dieClass::dieClass()
{
num = distribution(generator);
}
void dieClass::roll()
{
num = distribution(generator);
}