A pure virtual function is declared with = 0 and has no required implementation in the base. It says every concrete derived class must supply one.
struct Shape {
virtual double area() const = 0; // no body, derived classes must provide one
}; // Shape s; fails to compile, Shape is abstract
The difference from a plain virtual function is obligation. A virtual function ships a default that derived classes may replace. A pure virtual ships nothing to fall back on. So the compiler refuses to instantiate the class, and refuses any derived class that leaves it unimplemented.
Any class with at least one pure virtual is abstract. You use it as an interface: hold objects through a Shape pointer or reference. The compiler then proves that no half-finished type ever gets created.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.