Ah, I see. I've never used Xcode 3.
I did find a gcc pre-built installation package for Snow Leopard. However, it only installs gcc 4.2, which doesn't have any C++11 support. You could probably look at building your own installation or checking out clang (another compiler with C++11 support) but I feel it's probably not worth the trouble at the moment.
In short, yes, you need pointers for polymorphism to work. If you look at the code example above, the animals vector doesn't know what type of animals (cats or dogs, that is) will be in the vector until runtime. The code is valid because C++ understands that pointers to base and derived classes are type compatible.
Through our use of virtual functions and polymorphism, we employ dynamic binding
, whereby the correct virtual method is looked up at runtime. In essence, when we create a cat or dog object a hidden pointer to the vtable, the virtual method table used to look up the correct method for each object, is added as a member of the class. So, even though our vector contains pointers to animals, at runtime it knows which of the respective Noise() methods to run by looking them up in the vtable.
Since stack objects are typed at compile time, we can't achieve this without the use of pointers.
It sounds a bit messy and, in truth, it is. C++ isn't the ideal language for polymorphism, largely because of its roots in C. We tend to have to make a bit more of an effort in C++ (virtual functions, dynamic binding and the like) whereas it'll work a little easier in other languages, such as Java.
There's a pretty good polymorphism explanation right here on this site: http://www.cplusplus.com/doc/tutorial/polymorphism/
Good luck with the job search. :-)