Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Держіспит Матеріали.doc
Скачиваний:
1
Добавлен:
24.08.2019
Размер:
324.1 Кб
Скачать

4. Поліморфізм як одна з компонентів ідеології сучасного програмування

В современном программировании полиморфизм приобрел различные формы. В языке С++ предусмотрены следующие виды полиморфизма:

 простой полиморфизм функций;

 перегруженные операции;

 виртуальные функции;

 шаблоны функций и классов.

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

Перегрузка операций (точнее символов операций) позволяет расширить действие символов встроенных операций на классовые типы. Последнее дает возможность записывать более лаконичные и понятные коды для вычислений с объектами классов.

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

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

5. Принцип модульності у програмуванні. Процедури і функції, їх побудова та застосування

Принцип модульности позволяет выполнить декомпозицию создаваемой программы на отдельные, в достаточной мере автономные, элементы программы - модули. Модульный принцип в языке С++ реализуется классами, функциями и процедурами. Под процедурой понимается функция, не возвращающая значения.

Рассмотрим функции С++. Структура объявления (определения) функции, возвращающей значение, имеет следующий вид:

тип fun(параметры)

{ тело функции

}

Если функция не возвращает никакого значения, возвращаемый тип записывается как void. Параметры функции

Параметры функции являются локальными переменными, которые действуют в пределах тела функции. В качестве параметра функции может использоваться переменная, указатель или ссылка:

int F(int k, int *p, int &x) { ... }

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

Различие между параметрами-указателями и параметрами-ссылками иллюстрируется в следующем примере для функции swap, которая осуществляет обмен значениями двух объектов:

Вариант 1 Вариант 2

void swap(long *px, long *py) void swap(long &x, long &y)

{ long R=*px; *px=*py; *py=R; { long R=x; x=y; y=R;

} }

вызов функции: вызов функции:

long a,b; long a,b;

swap(&a,&b); swap(a,b);

Параметры - простые массивы никогда не передаются по значению: передается адрес первого элемента массива.

Можно объявить функцию с переменным числом параметров. Переменная часть списка параметров в заголовке такой функции указывается многоточием, например:

int F(int a, ...);

Для обработки списка параметров в этом случае используются средства из модуля <stdarg.h> .

Инициализация параметров функции

Заголовок функции может содержать инициализацию аргументов:

long F(int a, long x=0, long y=1)

{ ... }

Инициализируемые параметры должны быть последними в списке. Они могут не использоваться при вызове функции. Все следующие вызовы функции F являются правильными: F(n,a,b) , F(n,a) , F(n) .

Возвращаемое значение

Функция может возвращать:

- значение любого типа,

- адрес объекта,

- ссылку на объект.

Статические локальные переменные

Локальные переменные функции объявленные с применением служебного слова static отличаются тем, что значения этих переменных (также как и сами переменные) сохраняются до следующего вызова функции.

Прототипы

Прототип является предварительным объявлением функции. Он содержит информацию о типе функции, типах ее аргументов и их количестве. Прототип используется компилятором для контроля правильности вызова функции, а также для автоматического приведения аргументов к нужному типу. Пример:

int fun(int, float*, double&);