Статья удалена

Этот материал был удалён по просьбе автора.

Ладно, напишу свою версию. Если у тебя есть функция которая должна выводить объект в виде строки, можно объявить ее как

void printObj(const Stringable& obj) { std::cout << obj.toString(); }

А тип Stringable в объявлении функции это интерфейс, который говорит, что у объекта точно есть функция toString. Т.к. его имплементирует

В таких языках как ruby такого нет, так называемая утиная типизация, там в самой функции проверка идет obj.respond_to?("toString") которая проверяет что у объекта есть такой метод

Ответить