A pure virtual member function declares behavior without providing an implementation in the declaring class. Derived concrete classes must provide the function body. This creates an interface-like base that can relate otherwise unrelated classes, but only when they share meaningful semantics rather than merely similar names or methods. section 7.7
Mistake: inheriting from appearance
Making Horse inherit from Square because both have move creates misleading relationships and invites casts such as dynamic_cast<Horse*>. A safer design separates the classes, then introduces a small Moveable interface when both genuinely represent movable objects.

