c ++ не позволяет объявлять весь класс статическим
Конечно, это так.
class RandomClass
{
public:
RandomClass()
{
srand(time(0));
}
int NextInt(int high, int low)
{
return (rand() % (high - low)) + low;
}
}
RandomClass Random; //Global variable "Random" has static storage duration
//C# needs to explicitly allow this somehow because C# does not have global variables,
//which is why it allows applying the static keyword to a class. But this is not C#,
//and we have globals here. ;)
Правда, нет причин помещать это в класс. C ++ не заставляет вас помещать все в классы - на то есть веские причины. В C # вы вынуждены все помещать в класс и объявлять вещи в статических методах и тому подобное, но , что не является идеологическим C ++ .
Вы действительно не можете просто взять идеологический код C # и написать его на C ++ и ожидать, что он будет работать хорошо. Это очень разные языки с очень разными требованиями и характеристиками программирования.
Если вам нужен идеоматический способ C ++ для этого, не создавайте класс вообще. Вызовите srand
внутри вашего main
и определите функцию, которая выполняет ваш зажим:
int RandomInteger(int high, int low)
{
return (std::rand() % (high - low)) + low;
}
EDIT : Конечно, было бы лучше, если бы вы использовали новое средство генерации случайных чисел и uniform_int_distribution
, чтобы получить свой фиксированный диапазон вместо rand
. См. rand()
считается вредным .