Un classe abstraite est utilisée pour définir une interface. S'il s'agit réellement d'un interface, a priori on ne peut pas l'instancier: pour pouvoir être utilisée, il faut au moins avoir défini une implémentation pour cette interface, et dans ce cas on utilisera un pointeur sur cette interface initialisé à un objet correspondant à cette implémentation. Le C++ permet de définir une fonction virtuelle comme étant pure c'est-à-dire sans implémentation dans la classe. Si une classe a au moins une fonction virtuelle pure, elle considérée comme abstraite et on ne pourra créer d'objets de cette classe
class base{ public: virtual void f()=0; // virtuelle pure //... }; base b; //non : classe abstraite base *pb; //oui base& g(base &); //oui base h(base ); //non