Na przykładzie:

class Sortowacz { public: virtual void dodajLiczbe(int liczba) = 0; virtual int maksimum() const = 0;

A następnie zakładając, że mamy dwie realne implementacje SortowaczNaWektorze oraz SortowaczNaZbiorze można wykonać następujący kod: int main() { const int tablica_rozmiar = 11; const int[] tablica = {1,3,4,0,5,2,6,7,1,3,4};

Sortowacz* sort1 = new SortowaczNaZbiorze; Sortowacz* sort2 = new SortowaczNaWektorze;

int indeks = 0; while ( indeks < tablica_rozmiar )

sort1.dodajLiczbe( tablica[indeks] ); sort2.dodajLiczbe( tablica[indeks] ); std::cout << "Sort1: Obecne maksimum to " << sort1.maksimum() << std::endl; std::cout << "Sort2: Obecne maksimum to " << sort2.maksimum() << std::endl; indeks++;

delete sort1; delete sort2;

return 0; } Korzyść z takiego podejścia polega na tym, że interfejs dzięki hermetyzacji całkowicie milczy o sposobie zaimplementowania klasy a dodatkowo korzystając z mechanizmu polimorfizmu można posiadać wiele wymiennych klas realizujących ten sam interfejs, a to która z nich będzie wykorzystana może być zmieniane choćby w trakcie działania programu.