logo
шпоры по ООП

Производные классы: полиморфная функция

Полиморфные функции

Используя производные классы, можно определить интерфейс, предоставляющий унифицированный доступ к объектам неизвестных и/или различных классов. Это может быть использовано для написания полиморфных функций, т.е. таких функций, в которых

алгоритм специфицирован таким образом, что может быть применен к аргументам различных типов. Например:

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 мог бы, например, содержать виртуальную функцию извлечения ключа сортировки.