No, you can't select the type of the class this way. However, by using pointers (or references), you can manipulate all buildings the same way by manipulating pointers to the base class (this is called polymorphism, google for it if you want more information).
What you want are virtual constructors, but such mechanisms are not available in C++. Here's the short version of why there are no such things in C++:
http://www.research.att.com/~bs/bs_faq2.html#virtual-ctorWhat you could is delegate the instanciation of the class to an external class (a factory class), which will take care of creating the correct type depending of the parameter and will return a pointer to the base class. That's how it is done in general.