Это обеспечивает статический полиморфизм.
Допустим, я написал алгоритм с использованием класса очереди. Он имеет функцию front () для получения следующего элемента очереди и функцию enqueue () для добавления в конец очереди. Допустим, я обнаружил, что этот класс очереди написан плохо и очень медленно, и я бы предпочел использовать std :: vector, который намного быстрее (я знаю, что есть std :: queue, это всего лишь пример). Если бы единственный способ получить первый элемент std :: vector был с v [0], мне пришлось бы пройти через мой код и заменить все мои вызовы front () на [0]. Но, реализовав front (), std :: vector теперь может быть заменой моего класса очереди. Единственный код, который мне нужно изменить, - это тип контейнера в моем алгоритме.