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

}

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


 

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

322. Создание базы данных 315 KB
  Данная курсовая работа рассматривает создание базы данных Справочная ГИБДД. В курсовой работе разрабатывается БД, с помощью которой, можно будет вести отчет по любому водителю и его автомобилю.
323. Проектирование промышленного здания в Макеевке 227.5 KB
  Проектируемое здание предназначено для размещения основного производства, одноэтажное, с металлическим каркасом. Применяемый тип колон – сплошного сечения. Здание имеет II степень долговечности – срок службы составляет не менее 50 лет.
324. Малоэтажный жилой дом из мелкоразмерных элементов в г. Владимир 201 KB
  Индивидуальный мансардный одноквартирный 5-комнатный жилой дом с пристроенными гаражом и хозпостройкой. Здание имеет бескаркасную конструктивную схему с опиранием перекрытий на продольные и поперечные стены.
325. Теория международных отношений 697.39 KB
  Правовое регулирование МО. Социально-гуманитарные науки, изучающие мировые политические процессы, в качестве объекта исследования рассматривают общественные явления. Цели, средства и стратегии участников МО. Международное сотрудничество.
326. Исследование работы разрядной лампы с балластными сопротивлениями различных видов 86 KB
  Изучить влияние активного, индуктивного и ёмкостного балластного сопротивления на работу люминесцентной лампы. С увеличением коэффициента амплитуды резко снижается поток излучения лампы и срок службы электродов.
327. Анализ устойчивости элементов металлических конструкций 523 KB
  Коэффициент запаса устойчивости для данной стойки составляет. Значения критических усилий, определенные по методике СП, практически не отличаются от полученных в программе SCAD. Упругопластическая работа стержня с начальными несовершенствами.
328. Анализ чувствительности задач линейного программирования с использованием Microsoft Excel 261.5 KB
  Освоить технологию анализа чувствительности задач ЛП на основе различных типов отчетов, выдаваемых Microsoft Excel. Допустимое увеличение производства деталей первого типа.
329. Разработка организации технического обслуживания и ремонта МТП в ЦРМ хозяйства 2.51 MB
  Определение количества технических обслуживаний и ремонтов тракторов и автомобилей, распределение их по кварталам. Определение трудоемкости технических обслуживаний и ремонтов для тракторов и автомобилей. Подбор основного технологического оборудования и расчет площади участка.
330. Использование средств VBA для вычисления корня функционального уравнения с помощью численных методов 220 KB
  Описание заданного численного метода. Программа процедуры вычисления корня. Результаты вычисления значения корня для заданных пяти вариантов допустимой ошибки. Аргументы процедуры Koren.