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

}

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


 

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

44509. Биотехнические системы 5.73 MB
  Биотехнические системы – особый класс больших систем, в которых биологические и технические элементы связаны в едином контуре управления, причем роль управляющего звена в них могут играть как технические, так и биологические звенья. Создание таких систем является сложной задачей, использующей целый арсенал отдельных приемов, методов и подходов
44510. ОСНОВЫ ТЕОРИИ ГОСУДАРСТВА И ПРАВА 1.58 MB
  Общество выступает как система разнообразных общественных связей и общественных отношений. Общество — это сложнейшая, естественным путем сложившаяся социальная система, которая, в свою очередь, состоит из социальных сообществ.
44511. Биотехнологические основы приготовления хлеба 1.22 MB
  В учебном пособии представлены основные положения биотехнологии хлебопекарного производства, рассмотрены свойства нишевых веществ зерна, описаны разнообразные типы брожения и микроорганизмы, их вызывающие, приведены практические разработки и теоретическое обоснование применения различных заквасок для переработки ржаной и пшеничной муки, биотехнологические методы интенсификации процесса приготовления теста и улучшения качества готовых изделий.
44512. ПОДАТОК НА ПРИБУТОК ПІДПРИЄМСТВ 89.65 KB
  Доходи звітного періоду: їх склад та порядок визнання. Витрати звітного періоду: їх склад та порядок визнання. Основні засоби: класифікація, порядок та методи нарахування амортизації. Ставки податку на прибуток. Звільнення від сплати податку на прибуток в Україні...
44513. ЭКОЛОГИЧЕСКАЯ РЕГЛАМЕНТАЦИЯ И КОНТРОЛЬ КАЧЕСТВА ОКРУЖАЮЩЕЙ СРЕДЫ 99.21 KB
  Cформировать у студентов знание о мониторинге окружающей среды; о природных условиях и ресурсах; о многообразии экологических факторов, влияющих на живые организмы в различных средах обитания; о качестве окружающей среды; о качестве жизни; о роли экологической экспертизы и сертификации в реализации прав граждан на благоприятную среду
44514. Синхронные машины общего назначения 522.35 KB
  Синхронные машины общего назначения выпускают в виде ряда серий. Каждая серия включает в себя машины в определенном диапазоне мощностей и частот вращения, их выполняют на несколько нормализованных внешних диаметров статора, которые определяют габарит машины.
44515. Теория управления. Модели менеджмента 364.01 KB
  Конечная цель менеджмента - обеспечение прибыльности предприятия путем рациональной организации производственного (торгового) процесса, включая управление производством (коммерцией) и развитие технико-технологической базы.
44516. Типи тканин організму та їхні морфо-функціональні особливості 4.11 MB
  Удосконалити навички роботи зі світловим мікроскопом, ознайомитись з будовою деяких тканин організму та переконатися у відповідності організації тканин їхній фізіологічній функції.
44517. Основы знаний об арбитражном процессе 49.45 KB
  Специализация органов гражданской юрисдикции на рассмотрении споров в сфере коммерческого оборота известна многим странам мира. В России первый коммерческий суд был создан в 1832 году