C++ polymorphism allows objects to be treated as their base class type while exhibiting behavior specific to their derived class. There are two main types: inheritance polymorphism using public virtual functions, and interface polymorphism using template parameters. Inheritance polymorphism depends on virtual functions - functions declared virtual in a base class can be overridden in derived classes. Virtual functions allow dynamic binding so the correct implementation is called based on the object's actual derived type.