srand w klasach czy main'ie

0

Tak jak w temacie, posiadam dużo klas w których używam funkcji rand() i czy teraz w każdej definicji metody używającej funkcji rand() mam ustawiać ziarno srand'em czy zamiast tego dać go w main'ie ? Bo nie jestem pewien czy jak dam srand'a w main'ie to skąd nagle w definicji metody jakiejś klasy kompilator będzie wiedział, że ziarno zostało ustawione ?

1

Nie używaj tej funkcji, użyj c++11:

#include <random>
...

    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_real_distribution<double> dist(1.0, 10.0);
...

A jak musisz to funkcji main() i tylko jeden raz w całym programie.

0

W main albo jakiejś funkcji, która jest odpalana po uruchomieniu programu->
a) potrzebne ci jedno ziarno do utworzenia "losowości"
b) jeżeli ustawisz sobie ziarno w konstruktorze lub w jakiejś metodzie w klasie i będziesz ją wywoływać przy inicjacji nowego obiektu ( bez użycia aktualnego czasu sytemowego), to dostaniesz to samo ziarno-> utworzenie obiektu wywoła ten sam zestaw czynności za każdym razem i zajmą tyle samo czasu, skutek taki, że ziarno jest to same.
Ustaw sobie w main i dodatkowo użyj czasu systemowego, zamiast podawania srand(NULL), bo skutek będzie taki sam jak z konstruktorem ( uruchamianie programu wygeneruje to samo ziarno, gdy będzie srand(xxx) i xxx to stała).

Przykładowy kod z Qt, z mojej klasy Game, odpalanej przy rozruchu porogramu ( ale tylko jedna instancja, nie kilka).
(systemTime - atrybut klasy Game)

.cpp 
#include <stdlib.h>
#include <QTime>

systemTime = new QTime();
systemTime->currentTime();
 qsrand(time_t(systemTime));//masz za każdym uruchomieniem programu losowe ziarno, jedno

1 użytkowników online, w tym zalogowanych: 0, gości: 1