67356

Перевантаження шаблонної функції

Лекция

Информатика, кибернетика и программирование

Окрім створення безпосередньо перевизначених версій узагальненої функції, можна також перевизначати саму специфікацію шаблону функції. Для цього достатньо створити ще одну версію шаблону, яка відрізнятиметься від інших переліком параметрів. Розглянемо такий приклад...

Украинкский

2014-09-07

70 KB

1 чел.

Лекція № 20

Тема: Перевантаження шаблонної функції

План

  1.  Механізм перевантаження специфікації шаблону функції
  2.  Використання стандартних параметрів у шаблонних функціях
  3.  Обмеження, які застосовуються при використанні узагальнених функцій
  4.  Приклад створення узагальненої функції abs()

  1.   Механізм перевантаження специфікації шаблону функції

   Окрім створення безпосередньо перевизначених версій узагальненої функції, можна також перевизначати саму специфікацію шаблону функції. Для цього достатньо створити ще одну версію шаблону, яка відрізнятиметься від інших переліком параметрів. Розглянемо такий приклад.

Приклад. Демонстрація механізму перевизначення специфікації шаблону функції

    // Перша версія шаблону Fun().

template <class aType> void Fun(aType a)

{     cout << "Виконується функція Fun(aType a)" << endl;

}

    // Друга версія шаблону Fun().

template <class aType, class bType> void Fun(aType a, bType b)

{     cout << "Виконується функція Fun(aType a, bType b)" << endl;

}

void main()

{     Fun(10);            // Викликається функція Fun(a).

      Fun(10, 20);           // Викликається функція Fun(a, b).

}

   У цьому коді програми шаблон для функції Fun() перевизначається, щоб забезпечити можливість прийняття як одного, так і двох параметрів.

  1.   Використання стандартних параметрів у шаблонних функціях

   У шаблонних функціях можна змішувати стандартні параметри з узагальненими параметрами типу. Ці параметри працюють так само, як і у будь-якій іншій функції. Розглянемо такий приклад.

Приклад. Демонстрація механізму використання стандартних параметрів у шаблонній

                 функції

   // Відображення даних задану кількість разів.

template<class aType> void repeat(aType data, int times)

{    int tim = times;

     do

     {     cout << tim – times + 1 << " ==> " << data << endl;

            times--;

      } while(times);

      cout << endl;

}

void main()

{    repeat("Це тест.", 3);

     repeat(100, 5);

     repeat(99.0/2, 4);

}

    Ось які результати генерує ця програма.

1 ==> Це тест.

2 ==> Це тест.

3 ==> Це тест.

1 ==> 100

2 ==> 100

3 ==> 100

4 ==> 100

5 ==> 100

1 ==> 49.5

2 ==> 49.5

3 ==> 49.5

4 ==> 49.5

 

    У цьому коді програми функція repeat() відображає свій перший аргумент стільки раз, скільки задано її другим аргументом. Оскільки перший аргумент має узагальнений тип, то функцію repeat() можна використовувати для відображення даних будь-якого типу. Параметр times – стандартний, він передається за значенням. Змішане задавання узагальнених і стандартних параметрів, як правило, не викликає жодних проблем їх реалізації, застосовується найчастіше у програмуванні.

  1.   Обмеження, які застосовуються при використанні узагальнених функцій

    Узагальнені функції подібні до перевизначених функцій, але мають більше обмежень з їх застосування. При перевизначенні функцій в тілі кожної з них зазвичай записують різні дії. Але узагальнена функція повинна виконувати одні і ті самі дії для всіх її версій; відмінність між версіями полягає тільки в типі оброблюваних даних. Розглянемо приклад, у якому перевизначені функції не можна замінити узагальненою функцією, оскільки вони виконують різні дії:

void outdata(int i)

{    cout << i << endl;

}

void outdata(double d)

{    cout << d * 3.1416 << endl;

}

  1.   Приклад створення узагальненої функції abs()

    Функція abs() -  функція, яка повертає абсолютне значення заданого аргументу. Оскільки процедура повернення абсолютного значення числа однакова для всіх типів числових значень, то функція abs() може слугувати типовим прикладом для створення шаблонної функції.

    За наявності узагальненої версії функції abs() компілятор зможе автоматично створювати необхідну її версію. Програміст у цьому випадку звільняється від написання окремих версій для кожного типу даних.

    

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

                 абсолютне значення числа

 

template <class aType> aType myAbs(aType n)

{    return n < 0 ? -n : n;

}

void main()

{    cout << myAbs(-10) << endl;            // Для типу int

     cout << myAbs(-10.0) << endl;        // Для типу double

     cout << myAbs(-10L) << endl;         // Для типу long

     cout << myAbs(-10.0F) << endl;      // Для типу float

}

Головне тут те, що один і той самий алгоритм повинен застосовуватися до широкого діапазону типу даних.


 

А также другие работы, которые могут Вас заинтересовать

20016. Технология обработки информации в электронных таблицах (ЭТ). Структура электронной таблицы. Типы данных: числа, формулы, текст 38 KB
  Типы данных: числа формулы текст. Графическое представление данных. Электронные таблицы Электронная таблица это программа обработки числовых данных хранящая и обрабатывающая данные в прямоугольных таблицах. Можно вводить и изменять данные одновременно на нескольких рабочих листах а также выполнять вычисления на основе данных из нескольких листов.
20017. Интернет. Информационные ресурсы и сервисы компьютерных сетей: Всемирная паутина, файловые архивы, интерактивное общение. Назначение и возможности электронной почты. Поиск информации в Интернете 72 KB
  Адресация в Интернет Для того чтобы связаться с некоторым компьютером в сети Интернет Вам надо знать его уникальный Интернет адрес. Существуют два равноценных формата адресов которые различаются лишь по своей форме: IP адрес и DNS адрес. IP адрес IP адрес состоит из четырех блоков цифр разделенных точками. Благодаря такой организации можно получить свыше четырех миллиардов возможных адресов.
20018. Виды информационных моделей (на примерах). Реализация информационных моделей на компьютере. Пример применения электронной таблицы в качестве инструмента математического моделирования 55.5 KB
  Понятие модели. Пример применения электронной таблицы в качестве инструмента математического моделирования. Моделирование Человечество в своей деятельности научной образовательной постоянно созадет и использует модели окружающего мира. Строгие правила построения моделей сформулировать невозможно однако человечество накопило богатый опыт моделирования различных объектов и процессов.
20019. Язык как способ представления информации: естественные и формальные языки. Основные информационные процессы: хранение, передача и обработка информации 48 KB
  Понятие информации. Виды информации. Роль информации в живой природе и в жизни людей. Язык как способ представления информации: естественные и формальные языки.
20020. Измерение информации: содержательный и алфавитный подходы. Единицы измерения информации 39 KB
  Измерение информации: содержательный и алфавитный подходы. Единицы измерения информации. Определить понятие количество информации довольно сложно. один из основоположников кибирнетиеи американский математик Клож Шенон развил вероятностный подход к измерению количества информации а работы по созданию ЭВМ привели к объемному подходу .
20021. Дискретное представление информации: двоичные числа; двоичное кодирование текста в памяти компьютера. Информационный объем текста 40.5 KB
  Дискретное представление информации: двоичные числа; двоичное кодирование текста в памяти компьютера. Кодирование информации Представление информации происходит в различных формах в процессе восприятия окружающей среды живыми организмами и человеком в процессах обмена информацией между человеком и человеком человеком и компьютером компьютером и компьютером и так далее. Преобразование информации из одной формы представления...
20022. Дискретное представление информации: кодирование цветного изображения в компьютере (растровый подход). Представление и обработка звука и видеоизображения. Понятие мультимедиа 40.5 KB
  Дискретное представление информации: кодирование цветного изображения в компьютере растровый подход. Кодирование информации в компьютере Вся информация которую обрабатывает компьютер должна быть представлена двоичным кодом с помощью двух цифр 0 и 1. Это явилось причиной того что в компьютере обязательно должно быть организовано два важных процесса: кодирование которое обеспечивается устройствами ввода при...
20023. Процесс передачи информации, источник и приемник информации, канал передачи информации. Скорость передачи информации 25.5 KB
  Процесс передачи информации источник и приемник информации канал передачи информации. Скорость передачи информации. Передача хранение и обработка информации представляют собой информационные процессы протекающие в социальных биологических и технических системах. Передача это процесс распространения информации в пространстве.
20024. Понятие алгоритма. Исполнитель алгоритма. Система команд исполнителя (на примере учебного исполнителя). Свойства алгоритма. Способы записи алгоритмов; блок-схемы 53.5 KB
  Понятие алгоритма. Исполнитель алгоритма. Свойства алгоритма. Рассмотрим пример алгоритма для нахождения середины отрезка при помощи циркуля и линейки.