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 ?
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.
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