A polymorphic variable can hold values of different types. In C++ only pointers and references can be truly polymorphic, and can hold values of their declared class, or any subclasses.