Страница 17 из 25 Полиморфные функции Используя производные классы, можно определить интерфейс, предоставляющий унифицированный доступ к объектам неизвестных и/или различных классов. Это может быть использовано для написания полиморфных функций, т.е. таких функций, в которых алгоритм специфицирован таким образом, что может быть применен к аргументам различных типов. Например: void sort(common *v[], int size) { /* сортировка массива элементов типа common "v[size]" */ } Функции s o r t необходимо лишь иметь возможность сравнивать объекты класса c o m m o n для выполнения своей задачи. Таким образом, если класс c o m m o n имеет виртуальную функцию c m p r ( ) , s o r t ( ) будет иметь возможность сортировать массив объектов любого класса, производного от класса c o m m o n , для которого c m p r ( ) определена. Например: class common { ... virtual int cmpr(common *); }; class apple : public common { ... int key; int cmpr(common *arg) { /* предполагается, что arg также имеет тип apple */ return (key == k) ? 0 : (key };
class orange : public common { ... int cmpr(common *); }; Былаа выбрана функция c m p r ( ) , не более привлекательная на первый взгляд перегрузка операцииа " тремя исходами. Для того, чтобы написать функцию s o r t ( ) для обработки массива объектов класса c o m m o n , а не массива указателей на объекты класса c o m m o n , потребуется виртуальная функция s i z e ( ) (вычисление размера). Если желательно сравнивать между собой классы a p p l e и o r a n g e , для функции сравнения потребуется некоторый способ получения ключа сортировки. Класс c o m m o n мог бы, например, содержать виртуальную функцию извлечения ключа сортировки. |