you are creating new random numbers each time you call the drawBuildings member function, which you are calling every frame.
The reason they are always the same size when called from the constructor is because the seed of the sequence of the random number is always the same.
If you want to change the heights of the buildings each time the application starts use something like this before you generate the numbers from within the constructor :
this function sets the seed to an integer value returned from time(0);, which gets the current time from the system clock.
If you want to change the heights at some point in the future at runtime, create another member function such as which does as suggested in the constructor.
2 things I would recommend you doing :
1) look into how pseudo random numbers work in C++. A google search will pull up loads, heres one i found quick for you.
http://www.fredosaurus.com/notes-cpp/misc/random.html
2) Take a long look at your code and understand what its doing and why.