Скачиваний:
3
Добавлен:
20.05.2014
Размер:
411.65 Кб
Скачать

16.2 Полиморфизм

При составлении больших программ, например, при совместной работе коллектива разработчиков, могут появляться функции с одинаковыми именами. Кроме того, часто удобно иметь одно имя для функций с разными типами аргументов , например, exp(x) и exp(z) для вещественного значения x и комплексного значения z .

Как указывалось в разделе 14.3, п о л и м о р ф и з м - это правила использования функций с одинаковыми именами для разных целей.

Слово полиморфизм можно трактовать как "многоформенность", многообразие.

( по-гречески μορφη = форма ). Например, графит и алмаз полиморфны, т.к. имеют

одинаковый химический состав, но разный вид и разные свойства.

В ООП полиморфизм реализуется несколькими способами, в которых используются

перегрузка функций, перегрузка операторов, виртуальные функции, шаблоны. Эти разделы ООП сложны и кратко рассмотрим лишь некоторые возможности.

Виртуальную функцию использовали в предыдущем разделе.

В случаях, когда функции с одинаковыми именами находятся в разных классах,

используется полное имя метода для конкретного объекта, например,

obmy.Ma1 :: fmet(z) ;

для примера рис. 14.3.

16.3 О перегрузке функций и операций

Перегрузкой ( англ. overloading ) называется использование функций с одинаковыми именами, но различными аргументами.

Компилятор находит нужную функцию по типу фактических параметров при вызове.

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

Цель перегрузки состоит в том, чтобы функции с одинаковыми именами

по-разному выполнялась при обращении к ним с различающимися по типам и количеству аргументами. Например, для float x и complex z имеем разные алгоритмы вычисления значений exp(x) и exp (z) и разные типы возвращаемых значений - double и complex соответственно. Многие стандартные функции, как и exp, являются перегруженными. Конструкторы классов также обычно являются перегруженными функциями. Пример перегруженных функций:

# include < iostream.h >

# include < conio.h >

int f (int a ) { return a; }

int f ( int a, float b ) { cout << b <<endl ; return (int) (a*b) ; }

void main ( )

{ cout << f ( 4) << endl << f ( 3, 1.9) ; getch( ); }

Здесь будут вызываться разные функции, хотя их имена совпадают.

Перегрузкой операций называют возможность распространения действия стандартных операций ( например, + - * ) на нестандартные для них операнды. Другими словами, перегрузка операции есть назначение ей другого действия.

Все операции с комплексными числами перегружены и выполняются по правилам, отличным от правил операций для обычных чисел. Нестандартные правила для операций с комплексными числами описываются в классе complex.

Перегружены также операции для работы со строками класса string. Например,

знак + (плюс) для строк означает операцию конкатенации, т.е. соединения строк:

string a ("aa"), b ("bb"), c ("vvvvvv"); c = a + b ; cout << c <<endl;

При выполнении этого фрагмента получим на экране строку

aabb

Возможно описание перегрузки операций в тексте программы. Для этого используются специальные подпрограммы, называемые операциями-функциями, заголовки которых содержат ключевое слово operator и знак операции после этого служебного слова.

Лекция 17 Введение в систему BUILDER

Соседние файлы в папке Шпора по информатике